upload large file use html and servlet

14 篇文章 0 订阅

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;
      }



right result:

	{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;
            }
         }






临时这样写了;

如果有好的意见,请分享!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值