0

次のサーブレットに でアノテーションを付けると@MultipartConfig、 を使用できなくなりますApache common upload

@MultipartConfig

public class SendTheFileName extends HttpServlet {
  // something
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
           moveToSharedDirectory(request,path); // call to upload
  }
}

例えば ​​:

public boolean moveToSharedDirectory(HttpServletRequest request,String path) {
    System.out.println("1. OUTSIDE THE TRY BLOCK OF UPLOAD CLASS");
    try {
       System.out.println("2. IN THE TRY BLOCK OF UPLOAD CLASS");
       boolean isMultipart = ServletFileUpload.isMultipartContent(request);
       System.out.println("3. AFTER THE BOOLEAN STATEMENT " + isMultipart);
       if(!isMultipart) {
           // Error:File cannot be uploaded
           System.out.println("Message : IS NOT MULTIPART");
       } else {
           DiskFileItemFactory dfif = new DiskFileItemFactory();
           ServletFileUpload fileUpload = new ServletFileUpload(dfif);
           List list = null;
           list = fileUpload.parseRequest(request); // returns a list of FileItem instances parsed from the request
           Iterator iterator = list.iterator();
           System.out.println("4. JUST BEFORE ENTERING THE WHILE LOOP");
           System.out.println("5. CHECKING IF THE ITERATION HAS ANY ELEMENT : " + iterator.hasNext());

           // ... some more here {-}
         }
    } // close catch
} 

すぐ上のスニペットのステートメント:

System.out.println("5. CHECKING IF THE ITERATION HAS ANY ELEMENT : " + iterator.hasNext());

プリントfalse!何故ですか ?

注釈を削除するtrueと、ファイルをアップロードできるようになります。

対応する HTML :

<form method="post" action="SendTheFileName" enctype="multipart/form-data">
                <div id="Files_to_be_shared"> 
                      <input type="file" id="File" name="FileTag" />
                      <input type="submit" value="Share" /> 
                    </div>
 </form>

注: 何らかの理由で、Apache Commons を使用してファイルをアップロードする必要がありました。

4

1 に答える 1

3

サーブレットが呼び出される直前に、サーブレット@MultipartConfig3.0 組み込みリクエスト本文の解析をトリガーします。そのため、Apache Commons FileUpload は、リクエストを解析する番になると、空のリクエスト ボディに直面します。つまり、それらを混在させることはできません。また、両方ともカバーの下でまったく同じ仕事をしているため、それらを混ぜても意味がありません。multipart/form-dataservice()

次の 2 つのオプションがあります。

  1. @MultipartConfigApache Commons FileUpload を削除して保持します。

  2. または、@MultipartConfigApache Commons FileUpload を保持して削除します。

以下も参照してください。

于 2013-01-22T11:05:32.383 に答える