多部分表单请求抛出:必需的 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.

此外,重启邮递员也很重要。