Aborting upload from a servlet to limit file size

前端 未结 4 1632
余生分开走
余生分开走 2020-12-18 07:03

I\'d like to limit the size of the file that can be uploaded to an application. To achieve this, I\'d like to abort the upload process from the server side when the size of

相关标签:
4条回答
  • 2020-12-18 07:43

    You can do something like this (using the Commons library):

        public class UploadFileServiceImpl extends HttpServlet
        {
            protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException
            {
                response.setContentType("text/plain");
    
                try
                {
                    FileItem uploadItem = getFileItem(request);
                    if (uploadItem == null)
                    {
                            // ERROR
                    }   
    
                    // Add logic here
                }
                catch (Exception ex)
                {
                    response.getWriter().write("Error: file upload failure: " + ex.getMessage());           
                }
            }
    
            private FileItem getFileItem(HttpServletRequest request) throws FileUploadException
            {
                DiskFileItemFactory factory = new DiskFileItemFactory();        
    
                 // Add here your own limit         
                 factory.setSizeThreshold(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD);
    
             ServletFileUpload upload = new ServletFileUpload(factory);
    
                 // Add here your own limit
                 upload.setSizeMax(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD);
    
    
                List<?> items = upload.parseRequest(request);
                Iterator<?> it = items.iterator();
                while (it.hasNext())
                {
                    FileItem item = (FileItem) it.next();
                            // Search here for file item
                    if (!item.isFormField() && 
                      // Check field name to get to file item  ... 
                    {
                        return item;
                    }
                }
    
                return null;
            }
        }
    
    0 讨论(0)
  • 2020-12-18 07:49

    You might try doing this in the doPost() method of your servlet

    multi = new MultipartRequest(request, dirName, FILE_SIZE_LIMIT); 
    
    if(submitButton.equals(multi.getParameter("Submit")))
    {
        out.println("Files:");
        Enumeration files = multi.getFileNames();
        while (files.hasMoreElements()) {
        String name = (String)files.nextElement();
        String filename = multi.getFilesystemName(name);
        String type = multi.getContentType(name);
        File f = multi.getFile(name);
        if (f.length() > FILE_SIZE_LIMIT)
        {
            //show error message or
            //return;
            return;
        }
    }
    

    This way you don't have to wait to completely process your HttpRequest and can return or show an error message back to the client side. HTH

    0 讨论(0)
  • 2020-12-18 07:51

    With JavaEE 6 / Servlet 3.0 the preferred way of doing that would be to use the @MultipartConfig annotation on your servlet like this:

    @MultipartConfig(location="/tmp", fileSizeThreshold=1024*1024, 
        maxFileSize=1024*1024*5, maxRequestSize=1024*1024*5*5)
    public class UploadFileServiceImpl extends HttpServlet ...
    
    0 讨论(0)
  • 2020-12-18 07:53

    You can use apache commons fileupload library, this library permits to limir file size also.

    http://commons.apache.org/fileupload/

    0 讨论(0)
提交回复
热议问题