1. I upload large file use org.apache.commons.fileupload ,but I can not get response json String;other error json message can right return;
ep code:
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024);
// Handle uploaded file(s) in request.
ServletFileUpload uploadHandler = new ServletFileUpload(factory);
uploadHandler.setSizeMax(1024 * 1024);// 1M
List<FileItem> uploadedItems;
try
{
uploadedItems = uploadHandler.parseRequest(request);
}
catch (SizeLimitExceededException se)
{
log.error("upload file too large. Error: " + se.getMessage());
String respJson = responseToString(1020, "Upload file too large");
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
response.getWriter().write(respJson);
stopProcessUpgrade();
return;
}
catch (FileUploadException ex)
{
log.error("Could not parse request upload(s). Error: " + ex.getMessage());
String respJson = responseToString(1020, "Could not parse request upload");
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
response.getWriter().write(respJson);
stopProcessUpgrade();
return;
}
{errorCode: 1020;errorInfo: Request is not valid multipart upload request}
error result:
无法显示此网页
analyze:
返回的错误信息,都一模一样的,但是一直显示“无法显示此网页”;曾经认为是不是
uploadHandler.parseRequest(request) 是不是不把request给转化了,导致抓包工具不能得到response的正确信息,和request不能想匹配;
再次经过分析,查资料,尝试,终于验证:是因为
uploadHandler.setSizeMax(1024 * 1024);// 1M 这句话的原因;我限制了图片的大小,在解析request 的时候,不能一次传过来,而且request的内容是经过多次do post;所有当我return后,下一个request会再次进入post执行;这样把第一次返回来的结果给冲掉了;
2. current code:
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024);
factory.setRepository(new File(tempPicturePath));
// Handle uploaded file(s) in request.
ServletFileUpload uploadHandler = new ServletFileUpload(factory);
//uploadHandler.setSizeMax(maxFileSize);// 1M
List<FileItem> uploadedItems = uploadHandler.parseRequest(request);
Iterator<FileItem> iter = uploadedItems.iterator();
while (iter.hasNext())
{
FileItem item = (iter.next());
if(item != null && item.getSize() > 0 && !item.isFormField())
{
if(item.getSize() < maxFileSize)
{
file = processUploadedFile(item, userId);
}
else
{
log.warn("upload file too large.");
String respJson = responseToString(1020, "Upload file too large");
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
response.getWriter().write(respJson);
stopProcessUpgrade();
response.getWriter().close();
return;
}
}
else
{
log.warn("Current form not exits file");
String respJson = responseToString(1020, "Current form not exits file");
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
response.getWriter().write(respJson);
stopProcessUpgrade();
response.getWriter().close();
return;
}
}
临时这样写了;
如果有好的意见,请分享!