当前位置: 首页 > 知识库问答 >
问题:

文件上传使用fegn-multipart/form-data

李昱
2023-03-14

我试图使用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--

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

共有3个答案

长孙鸿振
2023-03-14

MBozic解决方案未满,您还需要为此启用编码器:

public class FeignConfig {
     
    @Autowired
    private ObjectFactory<HttpMessageConverters> messageConverters;

    @Bean
    public Encoder feignFormEncoder () {
        return new SpringFormEncoder(new SpringEncoder(messageConverters));
    }
}
@FeignClient(name = "file", url = "http://localhost:8080", configuration = FeignConfig.class)
public interface UploadClient {
    @PostMapping(value = "/upload-file", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    String fileUpload(@RequestPart(value = "file") MultipartFile file);
}
欧桐
2023-03-14

对于Spring启动 2 和Spring云启动器开放,请使用以下代码:

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

您需要在feign客户端调用中将@RequestParam更改为@RequestPart以使其工作,还需要将consumes添加到@PostMapping。

仉昱
2023-03-14

不,你不知道。您只需要定义一种代理接口方法,将内容类型指定为: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上载文件

 类似资料:
  • 问题内容: 我正在尝试使用伪装完成多部分文件上传,但似乎在任何地方都找不到很好的示例。我本质上希望HTTP请求类似于以下内容: 甚至… 我是否需要手动构建请求主体,包括生成多部分边界?考虑到此客户端可以执行的其他所有操作,这似乎有点过头了。 问题答案: 不,你没有。您只需要定义一种代理接口方法,将content-type指定为:multipart / form- data和其他信息,例如远程API

  • 我有一个用例,我需要通过AWS API网关使用AngularJS应用程序将CSV文件上传到我的后端应用程序(运行在Elastic Beanstalk-Django Python REST应用程序中)。 API网关与AWS Cognito集成。 后端应用程序需要CSV上载的表单数据。 重要设置在API网关资源POST方法中完成 API网关->设置->二进制媒体类型-添加了‘多部分/表单-数据 将标题

  • 我正在尝试上传一个文本文件(也尝试了PDF等)到Salesforce。文本文件包含“Hello World”。 这是我正在使用的代码 这将导致以下看起来符合Salesforce指导原则的请求正文:https://developer.Salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_sobject_insert_update_bl

  • 我正在尝试使用curl向REST服务发布一个xml文件(utf-16编码)。REST服务需要“multipart/form-data”内容类型。 Curl脚本:Curl-k-i-h“content-type=multipart/form-data”-f“filename=@file.xml;type=text/xml”-x POST-u: 然而,我在运行脚本时得到500个内部服务器错误。 响应:<

  • 我正在尝试使用多部分实体方法上传文件。但它失败,错误说{“错误”:“文件参数值'无'无效”} 我的代码是: File File = new File(" C:/Users/SST-06/Desktop/new . txt "); 我的实体文件包含所有提到的参数。 -hkYO-pblk 0 uqlxjtvklrbkosxz 7 mye-8 wbvbvanx Content-Disposition:f

  • 我有一个Web表单,其中包含一个文件上传选项和许多其他输入参数。我正在寻找一种方法来使用泽西请求处理程序处理此问题,其中方法参数将是文件输入和“所有其他参数”。 这个问题解释了我无法将其他参数获取到自定义模型对象中,因为浏览器将它们作为单独的多部分对象发送。接下来我尝试的是检索多值映射中的其他参数: 不幸的是,这也不起作用。 表单中还有大约20个其他参数(其中一个是多选择选项),因此我不想将它们作