RestClient : Required request part ‘file‘ is not present
问题重现
最近在试用 VS Code 的 RestClient 插件,当提交使用 POST 上传文件时,出现 Required request part 'file' is not present 的错误。
环境
restclient 插件为 : humao.rest-client,其图标如下
接口由spring-boot 提供,代码如下:
@RestController
@RequestMapping("/rest-client")
public class RestClientController {@PostMapping("/post/file")public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {Map<String, Object> resultMap = buildRestMap();resultMap.put("msg", "上传文件成功!");resultMap.put("fileName", file.getOriginalFilename());resultMap.put("fileSize", file.getSize());return resultMap;}/*** 构建空Map* * @return*/private Map<String, Object> buildRestMap() {return new HashMap<>();}
}
分析
根据报错 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 中,文件上传的格式如下:
###
# POST 请求
POST {file-upload-url}
# 请求内容类型
Content-Type: multipart/form-data; boundary=WebAppBoundary# 请求体 注意⚠️:空一行
--WebAppBoundary
# 描述
Content-Disposition: form-data; name="{文件接受参数}"; filename="{文件名}"#文件地址 注意⚠️:空一行
< D:\tmp\tmp01.txt
--WebAppBoundary--
注意: 空行!!!空行!!!
解决
最终使用如下接口文件请求成功
###
# POST 请求 上传文件
POST http://localhost:8080/rest-client/post/file
# 请求内容类型
Content-Type: multipart/form-data; boundary=WebAppBoundary# 请求体 注意⚠️:空一行
--WebAppBoundary
# 描述
Content-Disposition: form-data; name="file"; filename="tmp01.txt"#文件地址 注意⚠️:空一行
< D:\tmp\tmp01.txt
--WebAppBoundary--
请求结果:
HTTP/1.1 200
Content-Type: application/json
Transfer-Encoding: chunked
Date: Sat, 18 Jun 2022 01:11:20 GMT
Connection: close{"msg": "上传文件成功!","fileName": "tmp01.txt","fileSize": 279936
}

总结
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 的实现。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
