【发布时间】:2017-09-10 13:59:56
【问题描述】:
我需要将图像发送到服务器,我使用的是 angular 2,所以请求必须是异步的。这是我用来在客户端发送图像的代码:
return Observable_1.Observable.create(function (observer) {
var formData = new FormData();
var xhr = new XMLHttpRequest();
formData.append('image', image);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
observer.next({ response: xhr.response, status: xhr.status });
observer.complete();
}
else {
observer.error({ response: xhr.response, status: xhr.status });
}
}
};
xhr.open('POST', url, true);
if (headers)
for (var _i = 0, headers_1 = headers; _i < headers_1.length; _i++) {
var header = headers_1[_i];
xhr.setRequestHeader(header.header, header.value);
}
xhr.send(formData);
});
我用来在服务器上处理请求的代码
@PostMapping(value = "/api/product/image", consumes = {"multipart/mixed", "multipart/form-data"})
public ResponseEntity<ImageToken> postImage(MultipartHttpServletRequest request) throws ParseException {
MultipartFile file = request.getFile(request.getFileNames().next());
return imageService.saveImage("/products/", file);
}
我真的不知道出了什么问题。处理程序正在被触发,但在 request.getFileName() 上抛出异常,我在调试器中看不到请求中的任何文件。
这是我的多部分解析器配置:
@Bean(name = "multipartResolver")
public MultipartResolver multipartResolver(){
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("UTF-8");
resolver.setMaxUploadSize(500000000);
resolver.setMaxUploadSizePerFile(50000000);
return resolver;
}
我的 apache commons 和 spring boot 版本:
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>1.5.2.RELEASE</version>
<relativePath />
</parent>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.2</version>
</dependency>
【问题讨论】:
标签: javascript spring-mvc spring-boot xmlhttprequest apache-commons-fileupload