我正在尝试使用
commons-fileupload-1.1.1.jar
文件上传文件(我知道这不是最新版本,但它带有 struts 1.3.10
,所以我使用相同的)。
现在的问题是,当我解析
request
(HttpServletRequest) 以获取 List
的 FileItem
时,我得到一个空列表。
DiskFileItemFactory factory = new DiskFileItemFactory();
File tempDir = new File("/fileUploadDirectory");
tempDir.mkdir();
// Set factory constraints
factory.setSizeThreshold(10000);
factory.setRepository(tempDir);
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Set overall request size constraint
upload.setSizeMax(10000);
// Parse the request
List items = upload.parseRequest(request);
System.out.println(items);
System.out.println(request.getContentLength());
// Process the uploaded items
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
FileItem item = iter.next();
if (item.isFormField()) {
System.out.println("File is a FormField");
} else {
System.out.println("File is a File");
}
}
Q1。为什么我得到的列表是空的?
当我通过
request.getContentLength()
打印请求的大小时(如上面的代码所示),我得到了一些数字数据(1536),我认为它显示了文件的长度。如果它显示文件的长度,那么为什么我没有获得 FileItem
列表?
注意:我将它与
Struts 1.3.10
与ActionForm
一起使用。这会造成任何问题。
注意:我在解析请求时也没有遇到任何异常。
如果列表为空,则请求很可能不会以
multipart/form-data
的形式发送。确保请求方法设置为 post
并且编码类型设置为 multipart/form-data
:
<form method="post" enctype="multipart/form-data">
(只需将 HTML
<form>
元素替换为 Struts 等效元素,这可能是 <html:form>
)
也就是说,为什么不使用 Struts 内置的文件上传组件呢? 谷歌搜索了解到有一个
<html:file>
组件需要与org.apache.struts.upload.FormFile
属性绑定。