我正在尝试将图片上传到我的春季 mvc 应用程序的功能。
JSP部分:
...
<form method="POST" action="uploadImage" enctype="multipart/form-data">
<div class="load-line">
<input type="file" class="file"/>
<input type="submit" value="Upload">
...
配置:
...
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
...
控制器:
@RequestMapping(value="/member/createCompany/uploadImage", method=RequestMethod.POST)
public @ResponseBody String handleFileUpload(
@RequestParam("file") MultipartFile file){
String name = "image_name";
if (!file.isEmpty()) {
try {
byte[] bytes = file.getBytes();
BufferedOutputStream stream =
new BufferedOutputStream(new FileOutputStream(new File(name + "-uploaded")));
stream.write(bytes);
stream.close();
return "You successfully uploaded " + name + " into " + name + "-uploaded !";
} catch (Exception e) {
return "You failed to upload " + name + " => " + e.getMessage();
}
} else {
return "You failed to upload " + name + " because the file was empty.";
}
}
选择图片后,我单击上传并看到错误消息:
HTTP Status 400 - Required MultipartFile parameter 'file' is not present
我做错了什么?
你没有指定 name
属性,@RequestParam("textFile")
需要 name ,
<input type="file" class="file" name="textFile"/>
将 name 属性添加到 "file" 输入标签
<input type="file" class="file" name="file"/>
对于那些找不到合适解决方案的人,请不要忘记添加
spring.http.multipart.enabled=true
到您的配置文件
对于 Springboot:如果您的应用程序不使用 spring-boot-starter-web 和 spring-boot-starter-data-rest,而是使用 "spring-boot-starter-webflux",那么当您在 POST 请求中使用"@RequestParam("file") MultipartFile 文件"时,您将收到错误"HTTP Status 400 - 必需的多部分文件参数'文件'不存在"。
由于 webflux 是一个反应式库,因此不支持 MultipartFile。
您需要按照此链接以响应式编程方式上传表单数据。 https://github.com/entzik/reactive-spring-boot-examples/blob/master/src/main/java/com/thekirschners/springbootsamples/reactiveupload/ReactiveUploadResource.java
我尝试了很多。对于仅webflux应用程序,仅上述解决方案即可。