【问题标题】:Spring Controller does not receive file through RequestBody or RequestParamSpring Controller 不通过 RequestBody 或 RequestParam 接收文件
【发布时间】:2020-01-14 09:34:33
【问题描述】:

我正在尝试上传文件(任何类型),但是我做错了,无论是使用服务器端(Spring 控制器)还是客户端(邮递员)。

控制器(尝试两种方法):

@RestController
@RequestMapping("/group")
public class GroupController {

    @PostMapping(value = "/test1", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.MULTIPART_FORM_DATA_VALUE)
    public String testUpload1(@RequestBody MultipartFile file) {

        return null;
    }

    @RequestMapping(value = "/test2", method = RequestMethod.POST)
    public String testUpload2(@RequestParam(name = "file", required = true) MultipartFile multipartFile) {

        return null;
    }
}

上传者:

【问题讨论】:

  • 尝试将方法参数作为“@RequestParam(name = "file") MultipartFile 文件”而不是 @RequestBody 用于方法 testUpload1
  • 我添加了新答案,请检查。

标签: java spring controller postman


【解决方案1】:

你可以试试下面的代码。

@PostMapping(value = "/test1", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}, produces = MediaType.TEXT_PLAIN_VALUE)
    public String testUpload1(@RequestParam("file") MultipartFile uploadedFile) {

      System.out.println("Uploaded File Name = " + uploadedFile.getOriginalFilename());
      File file = new File("E:/sure-delete/" + uploadedFile.getOriginalFilename());

    //Upload functionality
      try {
        uploadedFile.transferTo(file);
      } catch (IOException e) {
        e.printStackTrace();
      }
        return ResponseEntity.ok("File uploaded successfully ...");
    }

找到截图

【讨论】:

  • 感谢您的建议!但是它不起作用,问题仍然存在:由于缺少“文件”参数,它甚至没有进入函数
【解决方案2】:

这个问题与 Spring 没有 MultipartResolver bean 有关。您的 Postman 设置看起来不错。

如果我没有定义 bean,我会收到以下错误:

[o.s.w.m.s.MissingServletRequestPartException: Required request part 'file' is not present]

您需要做的是在 XML 中定义一个 CommonsMultipartResolver bean:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- e.g.: 1 MB max upload size -->
    <property name="maxUploadSize" value="1048576"/>
</bean>

或者用 Java 来做:

@Bean
public MultipartResolver multipartResolver() {
    CommonsMultipartResolver resolver = new CommonsMultipartResolver();
    resolver.setMaxUploadSize(1048576);
    return resolver;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多