问题描述:使用axis2 下载附件,超过20m,配置了客户端附件缓存,但是没有起作用,直接导致内存溢出,上传没有问题,已通过测试。请哪位达人指点迷津~~~~~~~~~~~~~~~~~代码来源于网上的一个上传、下载实例,修改了上传部分对大文件的支持,但是下载还是不行,上代码
Server:
------------------------------------------------------------------------------------------------------
public class FileTransferServer {
public static final String TMP_PATH = "D:/temp"; public OMElement upload(OMElement element) throws Exception {
OMElement _fileContent = null;//文件内容
OMElement _fileName = null;//文件名
OMElement _fileType = null;//文件类型
//System.out.println("The element for upload: " + element);
for (Iterator _iterator = element.getChildElements(); _iterator
.hasNext();) {
OMElement _ele = (OMElement) _iterator.next();
if (_ele.getLocalName().equalsIgnoreCase("fileContent")) {
_fileContent = _ele;
}
if (_ele.getLocalName().equalsIgnoreCase("fileName")) {
_fileName = _ele;
}
if (_ele.getLocalName().equalsIgnoreCase("fileType")) {
_fileType = _ele;
}
} if (_fileContent == null || _fileType == null) {
throw new AxisFault("Either Image or FileName is null");
} OMText binaryNode = (OMText) _fileContent.getFirstOMChild();
String fileName = _fileName.getText();
String fileType = _fileType.getText();
String storeDir = TMP_PATH + "/" + "tempTest";
File dir = new File(storeDir);
if (!dir.exists()) {
dir.mkdir();
}
String filePath = storeDir + "/" + fileName + "." + fileType;
File uploadFile = new File(filePath);
if (uploadFile.exists()) {
filePath = storeDir + "/" + fileName + "(1)" + "." + fileType;
uploadFile = new File(filePath);
} // Extracting the data and saving
DataHandler actualDH;
actualDH = (DataHandler) binaryNode.getDataHandler(); FileOutputStream imageOutStream = new FileOutputStream(uploadFile);
//add by wangx 20090625 支持大文件上传,避免不能读数据
actualDH.writeTo(imageOutStream);
//删除该段代码,支持大文件上传
//InputStream is = actualDH.getInputStream();
//imageOutStream.write(IOUtils.getStreamAsByteArray(is));
// setting response
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace ns = fac.createOMNamespace("http://example.org/filedata",
"fd");
OMElement ele = fac.createOMElement("response", ns);
ele.setText("true");
return ele;
} public OMElement download(OMElement element) throws Exception {
//System.out.println("The element for download: " + element);
OMElement _userName = null;
OMElement _fileName = null;
OMElement _fileType = null;
for (Iterator _iterator = element.getChildElements(); _iterator
.hasNext();) {
OMElement _ele = (OMElement) _iterator.next();
if (_ele.getLocalName().equalsIgnoreCase("userName")) {
_userName = _ele;
}
if (_ele.getLocalName().equalsIgnoreCase("fileName")) {
_fileName = _ele;
}
if (_ele.getLocalName().equalsIgnoreCase("fileType")) {
_fileType = _ele;
}
}
String userName = _userName.getText();
String fileName = _fileName.getText();
String fileType = _fileType.getText();
String filePath = TMP_PATH + "/" + userName + "/" + fileName + "."
+ fileType;
//System.out.println("The filePath for download: " + filePath);
FileDataSource dataSource = new FileDataSource(filePath);
DataHandler expectedDH = new DataHandler(dataSource);
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace ns = fac.createOMNamespace("http://example.org/filedata",
"fd");
OMText textData = fac.createOMText(expectedDH, true);
OMElement ele = fac.createOMElement("response", ns);
ele.addChild(textData);
return ele;
}
}-------------------------------------------------------------------------------------------------
client:
public class FileTransferClient {
private static EndpointReference targetEPR =
new EndpointReference("http://localhost:8080/282WebServiceTest/services/FileOperation");
public static boolean upload(String fileName, File file, String fileType) {
try {
OMElement data = buildUploadEnvelope(fileName, file, fileType);
Options options = buildOptions();
ServiceClient sender = new ServiceClient();
sender.setOptions(options);
//System.out.println("The data in method upload: "+data);
OMElement ome = sender.sendReceive(data);
//System.out.println("Convert the data to element in method upload: "+ome);
String b = ome.getText();
return Boolean.parseBoolean(b);
}
catch(Exception e) {
e.printStackTrace();
}
return false;
}
public static boolean download(String userName, String fileName, String fileType) {
try {
OMElement data = buildDownloadEnvelope(userName, fileName, fileType);
Options options = buildOptions();
options.setProperty(Constants.Configuration.CACHE_ATTACHMENTS,Constants.VALUE_TRUE);
options.setProperty(Constants.Configuration.ATTACHMENT_TEMP_DIR,"D:/temp");
options.setProperty(Constants.Configuration.FILE_SIZE_THRESHOLD, "4000");
ServiceClient sender = new ServiceClient();
sender.setOptions(options);
//System.out.println("The data in method download: "+data);
OMElement ome = sender.sendReceive(data);
//System.out.println("Convert the data to element in method download: "+ome);
OMText binaryNode = (OMText) ome.getFirstOMChild();
binaryNode.setOptimize(true); //必须加此句,否则会出现ContentID is null的异常!
DataHandler actualDH = (DataHandler) binaryNode.getDataHandler();
FileOutputStream imageOutStream = new FileOutputStream("D:/temp/xx.xml");
actualDH.writeTo(imageOutStream);
imageOutStream.close();
/*InputStream is = actualDH.getInputStream();
imageOutStream.write(IOUtils.getStreamAsByteArray(is));*/
return true;
}
catch(Exception e) {
e.printStackTrace();
}
return false;
}
private static OMElement buildUploadEnvelope(String fileName, File file, String fileType) {
DataHandler expectedDH;
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace("http://example.org/filedata", "fd");
OMElement data = fac.createOMElement("upload", omNs);
OMElement fileContent = fac.createOMElement("fileContent", omNs);
FileDataSource dataSource = new FileDataSource(file);
expectedDH = new DataHandler(dataSource);
OMText textData = fac.createOMText(expectedDH, true);
fileContent.addChild(textData);
OMElement _fileName = fac.createOMElement("fileName", omNs);
_fileName.setText(fileName);
OMElement _fileType = fac.createOMElement("fileType", omNs);
_fileType.setText(fileType);
data.addChild(_fileName);
data.addChild(_fileType);
data.addChild(fileContent);
return data;
}
private static OMElement buildDownloadEnvelope(String userName, String fileName, String fileType) {
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace("http://example.org/filedata", "fd");
OMElement data = fac.createOMElement("download", omNs);
OMElement _userName = fac.createOMElement("userName", omNs);
_userName.setText(userName);
OMElement _fileName = fac.createOMElement("fileName", omNs);
_fileName.setText(fileName);
OMElement _fileType=fac.createOMElement("fileType", omNs);
_fileType.setText(fileType);
data.addChild(_userName);
data.addChild(_fileName);
data.addChild(_fileType);
return data;
}
private static Options buildOptions() throws AxisFault {
Options options = new Options();
options.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
options.setTo(targetEPR);
// enabling MTOM in the client side
options.setProperty(Constants.Configuration.ENABLE_MTOM, Constants.VALUE_TRUE);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
return options;
}
public static void main(String agrs[]) {
String file = "D:/3.xml";
String fn = "testUser";
String ft="xml";
// boolean rtv = upload(fn,new File(file),ft);
//System.out.println("is upload success: "+rtv);
String un="tempTest";
String downfn="testUser(1)";
if(download(un,downfn,ft)){
System.out.println("download success.");
}
else System.out.println("download fail.");
System.out.println("Client main end.");
}
}-------------------------------------------------------------------------------------
先行谢过~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Server:
------------------------------------------------------------------------------------------------------
public class FileTransferServer {
public static final String TMP_PATH = "D:/temp"; public OMElement upload(OMElement element) throws Exception {
OMElement _fileContent = null;//文件内容
OMElement _fileName = null;//文件名
OMElement _fileType = null;//文件类型
//System.out.println("The element for upload: " + element);
for (Iterator _iterator = element.getChildElements(); _iterator
.hasNext();) {
OMElement _ele = (OMElement) _iterator.next();
if (_ele.getLocalName().equalsIgnoreCase("fileContent")) {
_fileContent = _ele;
}
if (_ele.getLocalName().equalsIgnoreCase("fileName")) {
_fileName = _ele;
}
if (_ele.getLocalName().equalsIgnoreCase("fileType")) {
_fileType = _ele;
}
} if (_fileContent == null || _fileType == null) {
throw new AxisFault("Either Image or FileName is null");
} OMText binaryNode = (OMText) _fileContent.getFirstOMChild();
String fileName = _fileName.getText();
String fileType = _fileType.getText();
String storeDir = TMP_PATH + "/" + "tempTest";
File dir = new File(storeDir);
if (!dir.exists()) {
dir.mkdir();
}
String filePath = storeDir + "/" + fileName + "." + fileType;
File uploadFile = new File(filePath);
if (uploadFile.exists()) {
filePath = storeDir + "/" + fileName + "(1)" + "." + fileType;
uploadFile = new File(filePath);
} // Extracting the data and saving
DataHandler actualDH;
actualDH = (DataHandler) binaryNode.getDataHandler(); FileOutputStream imageOutStream = new FileOutputStream(uploadFile);
//add by wangx 20090625 支持大文件上传,避免不能读数据
actualDH.writeTo(imageOutStream);
//删除该段代码,支持大文件上传
//InputStream is = actualDH.getInputStream();
//imageOutStream.write(IOUtils.getStreamAsByteArray(is));
// setting response
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace ns = fac.createOMNamespace("http://example.org/filedata",
"fd");
OMElement ele = fac.createOMElement("response", ns);
ele.setText("true");
return ele;
} public OMElement download(OMElement element) throws Exception {
//System.out.println("The element for download: " + element);
OMElement _userName = null;
OMElement _fileName = null;
OMElement _fileType = null;
for (Iterator _iterator = element.getChildElements(); _iterator
.hasNext();) {
OMElement _ele = (OMElement) _iterator.next();
if (_ele.getLocalName().equalsIgnoreCase("userName")) {
_userName = _ele;
}
if (_ele.getLocalName().equalsIgnoreCase("fileName")) {
_fileName = _ele;
}
if (_ele.getLocalName().equalsIgnoreCase("fileType")) {
_fileType = _ele;
}
}
String userName = _userName.getText();
String fileName = _fileName.getText();
String fileType = _fileType.getText();
String filePath = TMP_PATH + "/" + userName + "/" + fileName + "."
+ fileType;
//System.out.println("The filePath for download: " + filePath);
FileDataSource dataSource = new FileDataSource(filePath);
DataHandler expectedDH = new DataHandler(dataSource);
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace ns = fac.createOMNamespace("http://example.org/filedata",
"fd");
OMText textData = fac.createOMText(expectedDH, true);
OMElement ele = fac.createOMElement("response", ns);
ele.addChild(textData);
return ele;
}
}-------------------------------------------------------------------------------------------------
client:
public class FileTransferClient {
private static EndpointReference targetEPR =
new EndpointReference("http://localhost:8080/282WebServiceTest/services/FileOperation");
public static boolean upload(String fileName, File file, String fileType) {
try {
OMElement data = buildUploadEnvelope(fileName, file, fileType);
Options options = buildOptions();
ServiceClient sender = new ServiceClient();
sender.setOptions(options);
//System.out.println("The data in method upload: "+data);
OMElement ome = sender.sendReceive(data);
//System.out.println("Convert the data to element in method upload: "+ome);
String b = ome.getText();
return Boolean.parseBoolean(b);
}
catch(Exception e) {
e.printStackTrace();
}
return false;
}
public static boolean download(String userName, String fileName, String fileType) {
try {
OMElement data = buildDownloadEnvelope(userName, fileName, fileType);
Options options = buildOptions();
options.setProperty(Constants.Configuration.CACHE_ATTACHMENTS,Constants.VALUE_TRUE);
options.setProperty(Constants.Configuration.ATTACHMENT_TEMP_DIR,"D:/temp");
options.setProperty(Constants.Configuration.FILE_SIZE_THRESHOLD, "4000");
ServiceClient sender = new ServiceClient();
sender.setOptions(options);
//System.out.println("The data in method download: "+data);
OMElement ome = sender.sendReceive(data);
//System.out.println("Convert the data to element in method download: "+ome);
OMText binaryNode = (OMText) ome.getFirstOMChild();
binaryNode.setOptimize(true); //必须加此句,否则会出现ContentID is null的异常!
DataHandler actualDH = (DataHandler) binaryNode.getDataHandler();
FileOutputStream imageOutStream = new FileOutputStream("D:/temp/xx.xml");
actualDH.writeTo(imageOutStream);
imageOutStream.close();
/*InputStream is = actualDH.getInputStream();
imageOutStream.write(IOUtils.getStreamAsByteArray(is));*/
return true;
}
catch(Exception e) {
e.printStackTrace();
}
return false;
}
private static OMElement buildUploadEnvelope(String fileName, File file, String fileType) {
DataHandler expectedDH;
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace("http://example.org/filedata", "fd");
OMElement data = fac.createOMElement("upload", omNs);
OMElement fileContent = fac.createOMElement("fileContent", omNs);
FileDataSource dataSource = new FileDataSource(file);
expectedDH = new DataHandler(dataSource);
OMText textData = fac.createOMText(expectedDH, true);
fileContent.addChild(textData);
OMElement _fileName = fac.createOMElement("fileName", omNs);
_fileName.setText(fileName);
OMElement _fileType = fac.createOMElement("fileType", omNs);
_fileType.setText(fileType);
data.addChild(_fileName);
data.addChild(_fileType);
data.addChild(fileContent);
return data;
}
private static OMElement buildDownloadEnvelope(String userName, String fileName, String fileType) {
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace("http://example.org/filedata", "fd");
OMElement data = fac.createOMElement("download", omNs);
OMElement _userName = fac.createOMElement("userName", omNs);
_userName.setText(userName);
OMElement _fileName = fac.createOMElement("fileName", omNs);
_fileName.setText(fileName);
OMElement _fileType=fac.createOMElement("fileType", omNs);
_fileType.setText(fileType);
data.addChild(_userName);
data.addChild(_fileName);
data.addChild(_fileType);
return data;
}
private static Options buildOptions() throws AxisFault {
Options options = new Options();
options.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
options.setTo(targetEPR);
// enabling MTOM in the client side
options.setProperty(Constants.Configuration.ENABLE_MTOM, Constants.VALUE_TRUE);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
return options;
}
public static void main(String agrs[]) {
String file = "D:/3.xml";
String fn = "testUser";
String ft="xml";
// boolean rtv = upload(fn,new File(file),ft);
//System.out.println("is upload success: "+rtv);
String un="tempTest";
String downfn="testUser(1)";
if(download(un,downfn,ft)){
System.out.println("download success.");
}
else System.out.println("download fail.");
System.out.println("Client main end.");
}
}-------------------------------------------------------------------------------------
先行谢过~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货