2008-10-01 13 views
4

私は、アプリケーションにアップロードできるファイルのサイズを制限したいと思います。これを実現するには、アップロードするファイルのサイズが制限を超えた場合に、サーバー側からアップロード処理を中止したいと思います。サーブレットからのアップロードを中止してファイルサイズを制限する

HTTPリクエストが完了するのを待たずに、サーバー側からアップロードプロセスを中止する方法はありますか?

答えて

2

あなたはこの(Commonsライブラリを使用して)のような何かを行うことができます。 JavaEEの6 /サーブレット3.0で

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

+0

あなたがしている場合Plsは私の答えを見てみましょうJavaEE 6/Servlet 3.0について –

1

あなたは、サーブレットの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を処理するのを待つ必要はありませんし、バックにエラーメッセージを返すか、表示することができます。この方法は、これをやってみてくださいクライアント側。

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

あなたはまた、ファイルサイズをlimirし、このライブラリの許可をApacheのコモンズファイルアップロードライブラリを使用することができます。HTH

3

それを行うの好ましい方法は、次のようにサーブレットに@MultipartConfig annotationを使用することです:

@MultipartConfig(location="/tmp", fileSizeThreshold=1024*1024, 
    maxFileSize=1024*1024*5, maxRequestSize=1024*1024*5*5) 
public class UploadFileServiceImpl extends HttpServlet ... 
関連する問題