RestClient : Required request part ‘file‘ is not present

问题重现

最近在试用 VS CodeRestClient 插件,当提交使用 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 的实现。在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据您提供的引用内容,"msg": "Required request part 'file' is not present" 的含义是请求中缺少了名为 'file' 的参数。 在您提供的请求结果中,可以看到成功上传文件的响应信息,其中包含了文件名和文件大小等信息。然而,在请求中缺少了 'file' 参数,这就导致了该错误的出现。 要解决这个问题,您需要确保在提交 POST 请求时,正确地包含了名为 'file' 的参数。可以检查以下几个方面: 1. 确认请求中是否包含了正确的参数名和对应的值。 2. 确保文件上传的路径或文件名正确,以便服务器能够找到并处理该文件。 3. 检查请求的 Content-Type 是否正确设置为适合文件上传的类型,例如 multipart/form-data。 如果您正在使用 VS Code 的 RestClient 插件进行文件上传,可以参考该插件的文档或查找相关示例代码,以确保正确地设置请求参数和处理文件上传的方式。 总之,要解决 "msg": "Required request part 'file' is not present" 的错误,您需要检查请求中的参数是否正确,并确保文件上传的相关设置正确无误。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [RestClientRequired request part ‘file‘ is not present](https://blog.csdn.net/m0_47406832/article/details/125342934)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值