RestClient : Required request part ‘file‘ is not present

心已赠人 2023-10-05 22:49 24阅读 0赞

问题重现

最近在试用 VS CodeRestClient 插件,当提交使用 POST 上传文件时,出现 Required request part 'file' is not present 的错误。

环境

restclient 插件为 : humao.rest-client,其图标如下在这里插入图片描述
接口由spring-boot 提供,代码如下:

  1. @RestController
  2. @RequestMapping("/rest-client")
  3. public class RestClientController {
  4. @PostMapping("/post/file")
  5. public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {
  6. Map<String, Object> resultMap = buildRestMap();
  7. resultMap.put("msg", "上传文件成功!");
  8. resultMap.put("fileName", file.getOriginalFilename());
  9. resultMap.put("fileSize", file.getSize());
  10. return resultMap;
  11. }
  12. /**
  13. * 构建空Map
  14. *
  15. * @return
  16. */
  17. private Map<String, Object> buildRestMap() {
  18. return new HashMap<>();
  19. }
  20. }

分析

根据报错 Required request part 'file' is not present 含义,请求中的file参数没有实例,即没有完成参数绑定。

通过实验,可能出现该错误的地方有如下几处:

  • 没有传参。这种是因为即使在接口参数前标注了 @RequestParam,但是在请求中没有传参,在GET、PUT、DELETE中都会发生。
  • 文件上传请求中没有指定将文件绑定到那个参数,或者参数绑定与接口需要的不一致。如本例中,接口将文件参数绑定到了 file。客户端请求时,就应该将文件绑定到该字段,即请求体描述应该这样写

    name 与接口文件接受参数保持一致

    filename 是文件名称,一般填写真实的名称即可,但也可以根据需要改一个名称

    Content-Disposition: form-data; name=”file”; filename=”tmp01.txt”

  • 文件上传请求格式不对。格式不对 RestClient提交的数据就不对,导致接口解析的数据也就不对。

humao.rest-client 中,文件上传的格式如下:

  1. ###
  2. # POST 请求
  3. POST {
  4. file-upload-url}
  5. # 请求内容类型
  6. Content-Type: multipart/form-data; boundary=WebAppBoundary
  7. # 请求体 注意⚠️:空一行
  8. --WebAppBoundary
  9. # 描述
  10. Content-Disposition: form-data; name="{文件接受参数}"; filename="{文件名}"
  11. #文件地址 注意⚠️:空一行
  12. < D:\tmp\tmp01.txt
  13. --WebAppBoundary--

注意: 空行!!!空行!!!

解决

最终使用如下接口文件请求成功

  1. ###
  2. # POST 请求 上传文件
  3. POST http://localhost:8080/rest-client/post/file
  4. # 请求内容类型
  5. Content-Type: multipart/form-data; boundary=WebAppBoundary
  6. # 请求体 注意⚠️:空一行
  7. --WebAppBoundary
  8. # 描述
  9. Content-Disposition: form-data; name="file"; filename="tmp01.txt"
  10. #文件地址 注意⚠️:空一行
  11. < D:\tmp\tmp01.txt
  12. --WebAppBoundary--

请求结果:

  1. HTTP/1.1 200
  2. Content-Type: application/json
  3. Transfer-Encoding: chunked
  4. Date: Sat, 18 Jun 2022 01:11:20 GMT
  5. Connection: close
  6. {
  7. "msg": "上传文件成功!",
  8. "fileName": "tmp01.txt",
  9. "fileSize": 279936
  10. }

在这里插入图片描述

总结

humao.rest-client 是众多 Rest Client 实现中的一种,humao.rest-client是其中最流行的一个。
本文介绍了VSCode中的使用。

在IntelliJ IDEA 2021.1.1 (Ultimate Edition) \ Build #IU-211.7142.45, built on April 30, 2021中默认也集成了该工具,其效果如下:
在这里插入图片描述
目前 Rest Client 的实现非常多,VScode 插件的实现就有300多款款,有些直接提供了更易操作的GUI界面,下图是 VsCode 插件库中搜索到的 Rest Client 工具。
在这里插入图片描述

许多主流浏览器插件也有对Rest Client 的实现,如下图是微软 Edge 插件中对RestClient 的实现。在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,24人围观)

还没有评论,来说两句吧...

相关阅读