سؤال

وأود أن تحد من حجم الملفات التي يمكن تحميلها على الطلب. ولتحقيق ذلك، أود أن إحباط عملية تحميل من جانب الخادم عندما يكون حجم ملف يتم تحميلها يتجاوز الحد المسموح به.

هل هناك طريقة لإجهاض عملية تحميل من جانب الملقم دون انتظار طلب HTTP إلى النهاية؟

هل كانت مفيدة؟

المحلول

ويمكنك أن تفعل شيئا من هذا القبيل (باستخدام مكتبة العموم ):

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

نصائح أخرى

ومع JavaEE 6 / بريمج 3.0 الطريقة المفضلة للقيام بذلك سيكون لاستخدام في @ MultipartConfig الشرح على بريمج الخاصة بك مثل هذا:

@MultipartConfig(location="/tmp", fileSizeThreshold=1024*1024, 
    maxFileSize=1024*1024*5, maxRequestSize=1024*1024*5*5)
public class UploadFileServiceImpl extends HttpServlet ...

وكنت قد تحاول القيام بذلك في طريقة doPost () من بريمج بك

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

وبهذه الطريقة لم يكن لديك إلى الانتظار لمعالجة تماما الخاص بك HttpRequest ويمكن أن تعود أو تظهر رسالة الخطأ مرة أخرى إلى العميل. HTH

ويمكنك استخدام مكتبة fileupload المشاعات اباتشي وتصاريح هذه المكتبة لlimir حجم الملف أيضا.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top