8

input type="file"Web アプリで参照するファイルをアップロードします。問題は、FileItemアップロードされたすべてのファイル情報を下に表示できますが、リストサイズが0になることです

request-> JakartaMutltiPartRequest-> ファイル属性

ファイルを読み取るJavaコードは次のとおりです

public InputStream parseRequestStreamWithApache(HttpServletRequest request)
  throws FileUploadException, IOException {
  InputStream is = null;
  FileItemFactory factory = new DiskFileItemFactory();
  ServletFileUpload upload = new ServletFileUpload(factory);
  List items = upload.parseRequest(request);
  // here the item size is 0 ,i am not sure why i am not getting my file upload in browser with type="file"
  // but If inspect request in debugger i can see my file realted info in request--->JakartaMutltiPartRequest----->files attribute
  Iterator iter = items.iterator();
  while (iter.hasNext()) {
    FileItem item = (FileItem) iter.next();

    if (!item.isFormField()) {
      is = item.getInputStream();
    }
  }

  return is;
}

編集:

JSP部分は次のとおりです。

<form NAME="form1" action="customer/customerManager!parseRequestStreamWithApache.action" ENCTYPE="multipart/form-data"   method="post" >
     <TABLE >
         <tr>
              <th>Upload File</th>
                  <td>
                   <input name="fileUploadAttr" id="filePath"  type="file" value="">
                 </td>
                  <td > 
                 <Input type="submit" value ="uploadFile"/>
                  </td>
          </tr>
    </TABLE>
</form>
4

4 に答える 4

14

以前に投稿した同じ質問へのコメントで述べたように、これはおそらく、以前にリクエストを解析したことが原因です。ファイルはリクエスト本文の一部であり、一度だけ解析できます。

アップデート:

私は通常、そのように commons-upload を使用します。

if (ServletFileUpload.isMultipartContent(request)) {
    ServletFileUpload fileUpload = new ServletFileUpload();
    FileItemIterator items = fileUpload.getItemIterator(request);
    // iterate items
    while (items.hasNext()) {
        FileItemStream item = items.next();
        if (!item.isFormField()) {
            is = item.openStream();
        }
    }
}
于 2012-10-24T12:16:08.330 に答える
3

マルチパートコンテンツを確認する必要があります

boolean isMultipart = ServletFileUpload.isMultipartContent(request);

if (isMultipart) {
    FileItemFactory factory = new DiskFileItemFactory();
    ServletFileUpload upload = new ServletFileUpload(factory);

    try {
        List items = upload.parseRequest(request);
        Iterator iterator = items.iterator();
        while (iterator.hasNext()) {
            FileItem item = (FileItem) iterator.next();
            if (!item.isFormField()) {
                String fileName = item.getName();

                String root = getServletContext().getRealPath("/");
                File path = new File(root + "/fileuploads");
                if (!path.exists()) {
                    boolean status = path.mkdirs();
                }

                File uploadedFile = new File(path + "/" + fileName);
                item.write(uploadedFile);
            }
        }
    } catch (Exception e) {
于 2012-10-24T12:23:15.060 に答える
0

weblogic 12 を使用している場合は、patch_wls1211 がインストールされているかどうかを確認してください。同じ問題が発生していましたが、patch_wls1211 を適用すると解決しました。

于 2014-11-14T18:13:16.810 に答える
0

アップロードするファイルのサイズはどれくらいですか? デフォルトのしきい値を超えている可能性があります。デフォルトは10Kだと思います

factory.setSizeThreshold(maxSizeYouWantToHandle);
于 2012-10-24T12:18:51.997 に答える