日期:2014-05-20  浏览次数:20906 次

commons-fileupload组件上传问题
这是我上传的部分代码
final long MAX_SIZE = 5 * 1024 * 1024;// 设置上传文件最大为 5M
// 允许上传的文件格式的列表
final String[] allowedExt = new String[] { "jpg", "jpeg", "gif" };
response.setContentType("text/html");
// 设置字符编码为GBK, 这样支持汉字显示
response.setCharacterEncoding("GBK");

// 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
DiskFileItemFactory dfif = new DiskFileItemFactory();
dfif.setSizeThreshold(20*4096);// 设置上传文件时用于临时存放文件的内存大小,这里是80k.多于的部分将临时存在硬盘
dfif.setRepository(new File(request.getRealPath("/") + "UploadTemp"));// 设置存放临时文件的目录,web根目录下的ImagesUploadTemp目录

// 用以上工厂实例化上传组件
ServletFileUpload sfu = new ServletFileUpload(dfif);
// 设置最大上传尺寸
sfu.setSizeMax(MAX_SIZE);

PrintWriter out = response.getWriter();
// 从request得到 所有 上传域的列表
List fileList = null;
fileList = sfu.parseRequest(request);

if (fileList == null || fileList.size() == 0) {
out.print("<script>");
out.print("alert(\"请选择上传文件\");");
out.print("parent.close();");
out.print("window.returnValue='';");
out.flush();
out.print("</script>");

}
问题出在红色部分
我发现一个问题,只要我上传的图片大小超过80k,就会报“请选择上传文件”的提示信息
凡是小于80k的文件,就可以正常上传
请问
dfif.setSizeThreshold(20*4096);// 
一定要设置很大吗?如果不是,错在什么地方?

------解决方案--------------------
dfif.setSizeThreshold(20*4096);// 
一定要设置很大吗?如果不是,错在什么地方?

这是设置临时文件的大小,当上传文件夹大过此值,就存到硬盘上,小于此值,就在内存里