使用Feign文件上传 – multipart / form-data

我正在尝试使用feign完成多部分文件上传,但我似乎无法在任何地方找到它的好例子。 我基本上希望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-- 

我是否需要手动构建请求主体,包括生成多部分边界? 考虑到这个客户端可以做的其他事情,这似乎有点过分了。

不,你没有。 您只需要定义一种代理接口方法,将内容类型指定为:multipart / form-data和其他信息,例如远程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文件上传

如果您已经在使用Spring Web,则可以尝试使用能够创建Multipart请求的Feign Encoder。 它可以发送单个文件,一个文件数组以及一个或多个其他JSON有效负载。 这是我的测试项目 。 如果您不使用Spring,则可以通过更改FeignSpringFormEncoder中的encodeRequest方法来重构代码。