Java - Commons-fileupload.jar - 问题

问题描述 投票:0回答:1

我正在尝试使用

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
一起使用。这会造成任何问题。

注意:我在解析请求时也没有遇到任何异常。

java file-upload struts-1
1个回答
2
投票

如果列表为空,则请求很可能不会以

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
属性绑定。

© www.soinside.com 2019 - 2024. All rights reserved.