多部分表单请求抛出:必需的 MultipartFile 参数 'image' 不存在
Multipart form request throws: Required MultipartFile parameter 'image' is not present
我尝试使用邮递员将图像上传到服务器。我正在使用 spring 使其余的 api 如下所示:
@RequestMapping(value = "/uploadPrescription", method =RequestMethod.POST)
public ResponseEntity<ResponseSuccessData> uploadPatientPrescription(
@RequestBody @RequestParam("image") MultipartFile image)
throws IOException {
但是它抛出一个错误:
org.springframework.web.bind.MissingServletRequestParameterException:
Required MultipartFile parameter 'image' is not present
正如您在邮递员中看到的那样,键名是 'image' 并且在休息时 api 也是 @RequestParam("image").
内容类型中的设置值 - Content-type = multipart/form-data,boundaries='--abc'
这是我的 spring 多部分配置 -
@Bean
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();
//commonsMultipartResolver.setMaxUploadSize(-1);
return commonsMultipartResolver;
}
可能是什么问题?
将 @RequestBody @RequestParam("image")
替换为 @RequestBody("image")
。
第一条语句无效,请参阅 - Spring uploading files.
@RestController
public class UserOfferController {
// upload image
@RequestMapping(value = "/uploadimage", method = RequestMethod.POST)
public ResponseEntity<ResponseObjectBean> uploadFile(@RequestParam("uploadedFile") MultipartFile file) {
int statusCode;
String msg;
Object data = null;
long maxsize = configuredValue.getFileMaxAcceptedSize();
if (!file.isEmpty()) {
String name = file.getOriginalFilename();
String imagePath = "path to save your image ";
try {
byte[] bytes = file.getBytes();
BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(new File(imagePath)));
stream.write(bytes);
statusCode = 200;
msg = "DONE";
data = true;
} catch (Exception e) {
e.printStackTrace();
statusCode = 500;
msg = "FAIL";
data = false;
}
} else {
statusCode = 500;
msg = "FAIL";
data = false;
}
responseData.setStatusCode(statusCode);
responseData.setStatusMsg(msg);
responseData.setData(data);
return new ResponseEntity<ResponseObjectBean>(responseData, HttpStatus.OK);
}
}
在 spring.xml
中添加这些行
<!-- mutipart upload configuration -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- max upload size in bytes -->
<property name="maxUploadSize" value="1024" />
<!-- max size of file in memory (in bytes) -->
<property name="maxInMemorySize" value="2048" />
</bean>
请删除 header 部分
请删除 - Content-Type : multipart/form-data;boundary='abc' postmanheader 部分的设置
1.Remove header POSTMAN 部分。
2.In 你的 API:
@RequestMapping(value = "/uploadPrescription", method =RequestMethod.POST)
public ResponseEntity<ResponseSuccessData> uploadPatientPrescription(
@RequestBody @RequestParam("image") MultipartFile image)
throws IOException {}
添加以下内容:
consumes = MediaType.MULTIPART_FORM_DATA_VALUE
所以它变成了:
@RequestMapping(value = "/uploadPrescription", method =RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<ResponseSuccessData> uploadPatientPrescription(
@RequestBody @RequestParam("image") MultipartFile image)
throws IOException {}
除了 Abhijit Chowdhury 的回答之外,如果您还在使用 spring 安全性,您仍然可以删除 Content-Type
并将您的令牌保留在 header 中,无需从中删除所有内容header.
此外,重启邮递员也很重要。
我尝试使用邮递员将图像上传到服务器。我正在使用 spring 使其余的 api 如下所示:
@RequestMapping(value = "/uploadPrescription", method =RequestMethod.POST)
public ResponseEntity<ResponseSuccessData> uploadPatientPrescription(
@RequestBody @RequestParam("image") MultipartFile image)
throws IOException {
但是它抛出一个错误:
org.springframework.web.bind.MissingServletRequestParameterException:
Required MultipartFile parameter 'image' is not present
正如您在邮递员中看到的那样,键名是 'image' 并且在休息时 api 也是 @RequestParam("image").
内容类型中的设置值 - Content-type = multipart/form-data,boundaries='--abc'
这是我的 spring 多部分配置 -
@Bean
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();
//commonsMultipartResolver.setMaxUploadSize(-1);
return commonsMultipartResolver;
}
可能是什么问题?
将 @RequestBody @RequestParam("image")
替换为 @RequestBody("image")
。
第一条语句无效,请参阅 - Spring uploading files.
@RestController
public class UserOfferController {
// upload image
@RequestMapping(value = "/uploadimage", method = RequestMethod.POST)
public ResponseEntity<ResponseObjectBean> uploadFile(@RequestParam("uploadedFile") MultipartFile file) {
int statusCode;
String msg;
Object data = null;
long maxsize = configuredValue.getFileMaxAcceptedSize();
if (!file.isEmpty()) {
String name = file.getOriginalFilename();
String imagePath = "path to save your image ";
try {
byte[] bytes = file.getBytes();
BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(new File(imagePath)));
stream.write(bytes);
statusCode = 200;
msg = "DONE";
data = true;
} catch (Exception e) {
e.printStackTrace();
statusCode = 500;
msg = "FAIL";
data = false;
}
} else {
statusCode = 500;
msg = "FAIL";
data = false;
}
responseData.setStatusCode(statusCode);
responseData.setStatusMsg(msg);
responseData.setData(data);
return new ResponseEntity<ResponseObjectBean>(responseData, HttpStatus.OK);
}
}
在 spring.xml
中添加这些行 <!-- mutipart upload configuration -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- max upload size in bytes -->
<property name="maxUploadSize" value="1024" />
<!-- max size of file in memory (in bytes) -->
<property name="maxInMemorySize" value="2048" />
</bean>
请删除 header 部分
请删除 - Content-Type : multipart/form-data;boundary='abc' postmanheader 部分的设置
1.Remove header POSTMAN 部分。
2.In 你的 API:
@RequestMapping(value = "/uploadPrescription", method =RequestMethod.POST)
public ResponseEntity<ResponseSuccessData> uploadPatientPrescription(
@RequestBody @RequestParam("image") MultipartFile image)
throws IOException {}
添加以下内容:
consumes = MediaType.MULTIPART_FORM_DATA_VALUE
所以它变成了:
@RequestMapping(value = "/uploadPrescription", method =RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<ResponseSuccessData> uploadPatientPrescription(
@RequestBody @RequestParam("image") MultipartFile image)
throws IOException {}
除了 Abhijit Chowdhury 的回答之外,如果您还在使用 spring 安全性,您仍然可以删除 Content-Type
并将您的令牌保留在 header 中,无需从中删除所有内容header.
此外,重启邮递员也很重要。