Apache commons fileupload FileItemIterator hasNext()始终返回false

时间:2016-11-01 13:23:23

标签: java

在我的 web.xml 中,没有过滤器。 在我的HTML中,已经提到了输入字段中的name属性。 在解析HTTPRequest之前,我没有使用任何 getParameter() getAttribute() API。

毕竟,我仍然无法得到任何元素。 请解释原因?

我的MVC控制器:

@RequestMapping(value = {"/upload"}, method = RequestMethod.POST)
public void uploadFileHandler(HttpServletRequest request) throws Exception
{
    // Check that we have a file upload request
    boolean isMultipart = true;//ServletFileUpload.isMultipartContent(request);
    if(true == isMultipart)
    {
        FileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        FileItemIterator iter = upload.getItemIterator(request);
        while (true == iter.hasNext()) 
        {
            FileItemStream item = iter.next();
            String name = item.getFieldName();
            InputStream stream = ((ServletRequest) item).getInputStream();
            if (true == item.isFormField()) 
            {
                System.out.println("Form field " + name + " with value " + Streams.asString(stream) + " detected.");
            } 
            else 
            {
                String fileName = item.getName();
            }
        }
    }
}

我的html文件:

var fileSelector = document.createElement('form');
fileSelector.setAttribute('id', 'uploadForm');
fileSelector.setAttribute('method', 'POST');
fileSelector.setAttribute('enctype', 'multipart/form-data');

var inputType = document.createElement('input');
inputType.setAttribute('type', 'file');
inputType.setAttribute('name', 'uploadedFile');
inputType.setAttribute('id','importFile');
fileSelector.appendChild(inputType);

Ajax电话:

$.ajax({
           url:  'upload',
           data: formData,
           contentType: false,
           processData: false,
           cache: false,
           type: 'POST',
           success: function(data)
           {
                alert("upload success");                
           },
           error: function(jqXHR, textStatus, errorThrown)
            {
                alert("upload fail");
            }
        });

1 个答案:

答案 0 :(得分:0)

可能配置中存在一些冲突。您基本上混合了两个不同的文件上传API。第二个将只获得一个空流。如果你使用commons-fileupload流API,你可能需要在application.properties中添加spring.http.multipart.enabled = false如果你使用Spring启动。如果你想上传文件通过使用MultipartFile,您需要启用multipart。