簡體   English   中英

如何在Java Servlet中限制上傳文件的大小

[英]How to limit uploaded file size in java servlet

我需要使用html type='file'將圖像從客戶端上傳到服務器,效果很好,到目前為止,我可以從客戶端發送文件並在servlet上接收,但是現在我需要將servlet中的圖像大小限制為2MB,如果大於2MB,我需要向客戶端發送一條有關圖像大小的錯誤消息。

這是我收到的發送圖像的servlet代碼:

public void doPost(HttpServletRequest request, 
      HttpServletResponse response)
      throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();

    MultipartRequest multipartRequest = new MultipartRequest(request, "D:\\");
    out.print("Successfully Uploaded");
}

到目前為止,它的工作是接收圖像並將其保存在D:目錄中,而我不想先保存圖像然后檢查圖像大小,而是要對MultipartRequest說些什么,如果您收到的圖像大於2MB,則會發送錯誤。

提前致謝:)

由於您尚未指定什么是“ MultipartRequest”類,因此我假設您正在使用oreilly包。

它具有一個公共MultipartRequest(HttpServletRequest請求,String saveDirectory,int maxPostSize)引發IOException構造函數,該構造函數采用max文件大小參數。

如果上載的文件大小大於maxPostSize,它將拋出IOException。 您可能會捕獲此異常並返回錯誤響應。

創建MultipartRequest實例時,可以限制上傳文件的大小。

  • MultipartRequest(javax.servlet.http.HttpServletRequest request, java.lang.String saveDirectory)

構造一個新的MultipartRequest來處理指定的請求,將所有上傳的文件保存到給定目錄,並將上傳大小限制為1 MB。

  • MultipartRequest(javax.servlet.http.HttpServletRequest request, java.lang.String saveDirectory, int maxPostSize)

構造一個新的MultipartRequest來處理指定的請求,將所有上傳的文件保存到給定目錄,並將上傳大小限制為指定的長度。

在Servlet上使用此代碼並立即嘗試

  private boolean isMultipart;
   private String filePath;
   private int maxFileSize = 50 * 1024;
   private int maxMemSize = 4 * 1024;
   private File file ; `

DiskFileItemFactory factory = new DiskFileItemFactory();


      // maximum size that will be stored in memory
      factory.setSizeThreshold(maxMemSize);

      // Location to save data that is larger than maxMemSize.
      factory.setRepository(new File("c:\\temp"));

      // Create a new file upload handler
      ServletFileUpload upload = new ServletFileUpload(factory);

      // maximum file size to be uploaded.
      upload.setSizeMax( maxFileSize );

      try { 
         // Parse the request to get file items.
         List fileItems = upload.parseRequest(request);

         // Process the uploaded file items
         Iterator i = fileItems.iterator();

         out.println("<html>");
         out.println("<head>");
         out.println("<title>Servlet upload</title>");  
         out.println("</head>");
         out.println("<body>");

         while ( i.hasNext () ) {
            FileItem fi = (FileItem)i.next();
            if ( !fi.isFormField () ) {
               // Get the uploaded file parameters
               String fieldName = fi.getFieldName();
               String fileName = fi.getName();
               String contentType = fi.getContentType();
               boolean isInMemory = fi.isInMemory();
               long sizeInBytes = fi.getSize();

               // Write the file
               if( fileName.lastIndexOf("\\") >= 0 ) {
                  file = new File( filePath + fileName.substring( fileName.lastIndexOf("\\"))) ;
               } else {
                  file = new File( filePath + fileName.substring(fileName.lastIndexOf("\\")+1)) ;
               }
               fi.write( file ) ;
               out.println("Uploaded Filename: " + fileName + "<br>");
            }
         }
         out.println("</body>");
         out.println("</html>");
         } catch(Exception ex) {
            System.out.println(ex);
         }

文件大小為字節形式,因此您可以根據您的要求為mb添加最大文件大小

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM