【发布时间】:2016-07-03 14:34:35
【问题描述】:
我想通过 restservice 上传文件。我在网上找到了很多,但仍然无法解决我的问题。也许是因为我在 Rest 服务中使用 Spring?! 这是我的代码:
HTML
<input type="button" value="Upload document" id="button">
<input id="fileToUpload" type="file">
JQUERY
jQuery("document").ready(function () {
$("#button").on("click", function () {
var fileInput= $('input[name="fileInput"]')[0].files[0];
var data = new FormData();
data.append('file', fileInput);
$.ajax({
url: '.../upload',
type: 'POST',
data: data,
cache: false,
contentType: false,
processData: false,
success: function(data){
alert("successfully.");
},
error: function(data){
alert("failed.");
}
});
});
});
JAVA(REST 服务)
@RequestMapping(value = "/upload", method = { RequestMethod.POST }, produces = { MediaType.MULTIPART_FORM_DATA_VALUE,
MediaType.APPLICATION_FORM_URLENCODED_VALUE, MediaType.APPLICATION_JSON_VALUE })
public void uploadingFile(@RequestBody InputStream uploadedInputStream) throws IOException {
System.out.println("uploadedInputStream: " + uploadedInputStream);
}
例外
Servlet.service() for servlet REST API Dispatcher threw exception: java.lang.IllegalStateException: Parameters processing failed.
我的 Rest 服务好吗?找不到我的错误:(
POM.XML
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
APPLICATION-CONTEXT.XML
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="50000000" />
</bean>
解决方案
JAVA(REST 服务)
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public void uploadingFile(@RequestParam("file") MultipartFile uploadedInputStream) throws IOException {
System.out.println("...the parameter binding works now");
}
JAVA(春季配置)
@Bean
public static CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver cmr = new CommonsMultipartResolver();
cmr.setMaxUploadSize(50000000);
return cmr;
}
(替代 - APPLICATION.XML)
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="50000000" />
</bean>
【问题讨论】:
-
好吧,我将rest服务中的参数类型更改为“MultipartFile”而不是“InputStream”,在jQuery中将内容类型更改为“multipart/form-data”而不是“application/x-www-form” -urlencoded”。这里的例外是:“java.lang.IllegalArgumentException:预期的 MultipartHttpServletRequest:是否配置了 MultipartResolver?” .将“
”添加到 application.xml 并没有解决它... -
您可以将 contentType 属性设置为 false。
-
thx 我改了...仍然有同样的问题“java.lang.IllegalArgumentException: Expected MultipartHttpServletRequest: is a MultipartResolver configured?”
标签: java jquery spring rest file-upload