首页 文章

多部分表单请求抛出:不存在所需的MultipartFile参数'image'

提问于
浏览
0

我尝试使用邮递员将图像上传到服务器 . 我使用spring来制作其余的api如下:

PostMan mutlipart request

@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中,api也是@RequestParam(“image”) .

在内容类型中设置值 - Content-type = multipart / form-data,boundary =' - abc'

这是我的多部分 spring 配置 -

@Bean
  public CommonsMultipartResolver multipartResolver() {

  CommonsMultipartResolver commonsMultipartResolver = new      CommonsMultipartResolver();
//commonsMultipartResolver.setMaxUploadSize(-1);
return commonsMultipartResolver;

}

可能是什么问题呢?

5 回答

  • 0

    请删除 Headers 部分

    enter image description here

    请删除邮递员 Headers 部分中的 - Content-Type:multipart / form-data; boundary ='abc'设置

  • 1
    @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>
    

    enter image description here

  • 2

    除了Abhijit Chowdhury的回答,如果你仍然使用spring security,你可以删除 Content-Type 并将你的令牌保留在 Headers 中,不需要从 Headers 中删除所有内容 .

    此外,重新启动邮递员很重要 .

  • 3

    1.在POSTMAN中删除 Headers 部分 .

    2.在您的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 {}
    
  • -1

    @RequestBody @RequestParam("image") 替换为 @RequestBody("image") . 第一个语句无效,请参阅 - Spring uploading files .

相关问题