前一阵子给朋友做了一个小东东,因为全部采用的是web service方式,使用了apache的axis,其中一个功能是上传下载,就直接使用了web service 的方式来上传附件。
原理很简单,就是把文件转换成字节byte[]传到服务端过去,下载也是正好是反过来的过程。
定义web service的接口类
public interface UploadService extends java.rmi.Remote {
public int uploadFile(org.cxp.info.entity.UploadFile[] file, java.lang.String fileName) throws java.rmi.RemoteException;
public org.cxp.info.entity.UploadFile[] getUploadFile(org.cxp.info.entity.UploadFile condition) throws java.rmi.RemoteException;
}
定义UploadFile类,该类封装了文件byte,文件名
public class UploadFile implements java.io.Serializable {
private java.lang.String key;
private java.lang.String fileName;
private byte[] fileByte;
public UploadFile() {
}
public UploadFile(
java.lang.String key,
java.lang.String fileName,
byte[] fileByte) {
this.key = key;
this.fileName = fileName;
this.fileByte = fileByte;
}
...//以上变量的get和set方法,不再写出
}
这样客服端就可以通过调用这样的接口上传附件和下载附件了。客服端和服务端都要有这个接口。
问题来了,通过这样的上传,有些客服端附件超过4M就会上传不成功,提示内存溢出。
我们知道在在终端启动一个java程序,如,我们运行YourClass.class,要这样写 java -classpath your.lib YourClass
如果YourClass.class要调用上述web service 的接口进行上传文件,我们需要这样增加参数 -mx80M ,
如:java -classpath your.lib -mx80 YourClass
经测试就可以传10M左右的附件。可以把80改大,就能上传更大的附件,当然,web service上传功能有限,
在使用中需要仔细斟酌