java - 如何同时接受 multipart 和 application/x-www-form-urlencoded?

标签 java jquery http servlets

我构建了一个允许上传文件或上传列表作为输入的 servlet。到目前为止,我已经通过将 servlet 设置为接受 multipart/form-data 来处理它,因此即使没有文件,我也会将列表作为一部分读取。

我现在尝试调用此 servlet 以通过 JQuery AJAX 方法而不是通过表单上传列表。如果我尝试通过该方法正常上传列表,我会得到:

org.apache.tomcat.util.http.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is application/x-www-form-urlencoded; charset=UTF-8

如果我像这样将 contentType 设置为 multipart/form-data:

$.ajax({    
    url: someUrl, 
    type: 'POST', 
    contentType: 'multipart/form-data', 
    data: {list: inputList}
});

我得到的是这个错误:

org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found

我的问题是,是否有某种方法可以配置 servlet 以接受两种内容类型,或者是否有某种方法可以编写 ajax 数据来上传 multipart/form-data?

我知道使用 FormData API 上传 multipart/form-data 很简单,但我需要支持 IE9,所以这不是一个选项。

最佳答案

我建议你使用Apache Commons FileUpload图书馆。它为您提供了一个统一的界面,无论提交的是哪种类型的表单,并且可以轻松处理上传的文件。请参阅 User Guide处理上传的项目部分,它应该让您大致了解其工作原理。

关于java - 如何同时接受 multipart 和 application/x-www-form-urlencoded?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11887974/

相关文章:

java - 找不到 [javax.sql.DataSource] 类型的合格 bean

java - 使用java在普通io中使用moveFile方法移动文件时出现异常

java - java中的扩展形式

java - 从集合初始化 map

javascript - 更新动态 html 属性

http - 为什么 chrome devtools 显示超过 6 个并发的 ajax 请求?

HTML5 Rackspace 访问控制允许来源不工作

jquery - 当 ControlToValidate 在客户端中不可见时禁用RequiredFieldValidator

Javascript:DOM操作后返回选择(突出显示的文本)

Qt QNetworkAccessManager 和多个QNetworkReply