最近两个星期利用业余时间在开发一个符合自己使用的MVC框架,目前正在测试当中。框架支持多文件上传功能,文件上传的过程中,会在服务端创建临时文件,等所有操作完毕后再删除临时文件。因此,不会出现由于文件尺寸过大而导致内存溢出情况,这个垢病在以往使用其他上传组件的时候,弄得我头痛不已。为了实现这个框架的功能需求,便自己开发了一个看似更完美的上传组件,在使用上也力求简单,事实上,这个上传组件在使用上确实非常简单,而且功能齐全。组件是框架结构的一部份,但可以独立使用,并且不依赖任何第三方类库。所以,便在发布我的MVC框架之前,先独立发布这个上传组件(含源代码和使用范例 ),以践行JAVA世界的开源精神,如果能对JAVA开发者起到一丝丝的帮助,我都会倍感欣慰。当然,由于本人的水平有限,在设计开发上必有不足之处,欢迎各位提出宝贵意见。
来看看一段使用范例中的主要代码,以Servlet中使用为例:
StringBuilder sb=new StringBuilder("已上传的文件列表<hr>");
//创建simpleface-upload上传组件实例
FileUploadCommon upload=new FileUploadCommon(request);
//设置保存文件目录
upload.setSaveFolder("C:\\temp");
//设置允许单个文件上传的最大字节数(不设置则不限)
//upload.setAllowedMaxLength(1024*1024);
//设置允许上传的文件类型(不设置则不限)
//upload.setAllowedExtension(new String[]{"wav", "mp3"});
try {
upload.acceptData(); //接收数据
List<UploadFile> uploadFileList=upload.getUploadFile(); //获取所有上传的文件
int i=1;
for(UploadFile uf : uploadFileList)
{
sb.append("文件名:").append(uf.getFileName())
.append("<br>文件类型:").append(uf.getFileExtension())
.append("<br>文件大小:").append(uf.getFileSize())
.append("<br>--------------------");
uf.setFileName("uploadFile_"+i+uf.getFileExtension()); //设置保存文件名称
uf.save(); //保存文件
++i;
}
//获取表单其他信息
String userName=upload.getRequestParameter("userName");
System.out.println("userName="+userName);
upload.close(); //记住一定要释放资源
response.setContentType("text/html;charset=GBK");
response.getWriter().println(sb.toString()); //输出已上传的所有文件信息
response.getWriter().close();
} catch (MaxLengthExceededException e) {
// 上传文件大小超出最大限制
e.printStackTrace();
} catch (ExtensionExceededException e) {
// 上传文件类型不允许
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
个人感觉在使用上已经非常简单,对于文件上传的功能需求也就如此了,重点在于前面说过的,由于在服务端创建临时文件来接收文件,所以解决了时下困扰很多人的上传大文件的问题。不足之处在于,增加了存取临时文件I/O的开销,但我想,这不是什么大的问题。