使用假象上传文件 - 多部分/表单数据

2022-09-04 02:35:43

我正在尝试使用假装完成多部分文件上传,但我似乎无法在任何地方找到一个很好的例子。我基本上希望HTTP请求的结果类似于这样:

...
Content-Type: multipart/form-data; boundary=AaB03x

--AaB03x
Content-Disposition: form-data; name="name"

Larry
--AaB03x
   Content-Disposition: form-data; name="file"; filename="file1.txt"
   Content-Type: text/plain

... contents of file1.txt ...
--AaB03x--

甚至...

------fGsKo01aQ1qXn2C
Content-Disposition: form-data; name="file"; filename="file.doc"
Content-Type: application/octet-stream

... binary data ...

------fGsKo01aQ1qXn2C--

我是否需要手动构建请求正文,包括生成多部分边界?考虑到此客户端可以执行的其他所有操作,这似乎有点过分。


答案 1

不,您不需要。您只需要定义一种代理接口方法,将内容类型指定为:多部分/表单数据和其他信息,例如远程API所需的参数。下面是一个示例:

public interface FileUploadResource {

    @RequestLine("POST /upload")
    @Headers("Content-Type: multipart/form-data")
    Response uploadFile(@Param("name") String name, @Param("file") File file);

} 

完整的示例可以在这里找到:使用Open Feign上传文件


答案 2

对于 spring boot 2 和 spring-cloud-starter-openfeign,请使用以下代码:

@PostMapping(value="/upload", consumes = "multipart/form-data" )
QtiPackageBasicInfo upload(@RequestPart("package") MultipartFile package);

您需要在假装客户端调用中将@RequestParam更改为@RequestPart以使其正常工作,并且还需要将消耗添加到@PostMapping。


推荐