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>
同じ質問へのコメントで言ったように、あなたは以前に投稿しましたが、これはおそらく以前にリクエストを解析したことがあるためです。ファイルはリクエスト本文の一部であり、1回だけ解析できます。
更新:
私は通常、コモンズを使用します-そのようにアップロードします:
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();
}
}
}
マルチパートコンテンツを確認する必要があります
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) {
Weblogic 12を使用している場合は、patch_wls1211がインストールされているかどうかを確認してください。同じ問題が発生していましたが、パッチws1211を適用すると解決しました。
アップロードするファイルの大きさはどれくらいですか?デフォルトのしきい値を超えている可能性があります。デフォルトは10Kだと思います
factory.setSizeThreshold(maxSizeYouWantToHandle);