最近在做文件上传的一个项目,由于上传的文件为镜像文件,体积很大,一般的插件无法满足,采用SWFUpload插件则可以实现大文件的上传,经过测试单个文件3.5g大小可以实现上传,22g的文件则上传失败。
SWFUpload插件相对于其他插件有以下优点:1.单个文件可以很大 2.可以同时上传多个文件到队列中 3.拓展性很强。
以下是基于jfinal的一个简单实例。
1.html部分
2.核心js部分
(function($, $w){
var swfu ;})(jQuery, window);
3.controller部分(upload_url请求上传的地址)
/*注意要引入的是这几个包,否则容易出错*/
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
*文件上传
*/
public void swfupload(){
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置内存缓冲区,超过后写入临时文件
factory.setSizeThreshold(10240000);
// 设置临时文件存储位置
//String base = "/files/xk";
String base = "/swfuploaFile";
File file = new File(base);
if(!file.exists())
file.mkdirs();
factory.setRepository(file);
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置单个文件的最大上传值
upload.setFileSizeMax(10002400000l);
// 设置整个request的最大值
upload.setSizeMax(10002400000l);
upload.setHeaderEncoding("UTF-8");
try {
HttpServletRequest request =getRequest();
List> items = upload.parseRequest(request);
FileItem item = null;
String fileName = null;
for (int i = 0 ;i < items.size(); i++){
item = (FileItem) items.get(i);
fileName = base + File.separator + item.getName();
// 保存文件
if (!item.isFormField() && item.getName().length() > 0) {
item.write(new File(fileName));
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
renderJson(new ResultJson(ResultCode.SUCCESS));
}
未完,待续。。。