我有一个dev服务器,它在localhost:4200处旋转角度2,在localhost:8080处使用Spring旋转tomcat。 我尝试以下列方式将文件上传到服务器:
角度代码:
uploadAvatar(file:File){
let xhr = new XMLHttpRequest()
xhr.open("POST",`http://localhost:8080/api/upload/avatar`)
xhr.setRequestHeader("Content-Type","multipart/form-data")
xhr.send(file)
}
控制器代码Spring:
@RequestMapping(value = "/api/upload/avatar", method = RequestMethod.POST)
public String uploadFile(MultipartFile file){
log.info(file);
return file.getName();
}
但是在尝试下载文件后,错误出现在java-console中:
org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request;
nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found
如何解决此错误?
谢谢。
更新1
"重复"与Spring MVC + JSP一起使用,我试图通过Ajax下载文件。这个决定的版本对我没有帮助。
更新2
Spring Boot(v1.4.3.RELEASE)
我使用java配置,如果你愿意,我会给出一个完整配置的例子。
答案 0 :(得分:0)
我找到了解决问题的方法,下面的postorabs详细描述了我为此做了什么。
作为演示文稿,我使用Angular 2,发送文件的方式如下。
uploadFile(file:File){
let form = new FormData();
form.append("file",file)
let xhr = new XMLHttpRequest()
xhr.open("POST",`${URL}/api/upload/avatar`)
xhr.send(form)
}
Content-Type
和本案例中的boundary
会自动关联。
需要在服务器Stronie上进行以下操作:
添加两个bean:
@Bean(name = "commonsMultipartResolver")
public MultipartResolver multipartResolver() {
return new StandardServletMultipartResolver();
}
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setMaxFileSize("10MB");
factory.setMaxRequestSize("10MB");
return factory.createMultipartConfig();
}
控制器如下所示:
@RequestMapping(value = "/api/upload/avatar", method = RequestMethod.POST,consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public String uploadFile(@RequestPart MultipartFile file){
log.info(file);
return file.getOriginalFilename();
}