首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Cloud Feign MultipartFile上传

Spring Cloud Feign MultipartFile上传
EN

Stack Overflow用户
提问于 2018-01-05 00:07:43
回答 1查看 5K关注 0票数 3

我在Spring Cloud上有客户端角色微服务和服务器角色微服务,我在客户端微服务上有FeignClient bean,方法接受MultipartFile,如下所示

代码语言:javascript
复制
@RequestMapping(value = {"/files"}, consumes = {"multipart/form-data"}, method = {RequestMethod.POST}
)
ResponseEntity uploadFile(@RequestBody MultipartFile file, @RequestParam("someParam") String someParam)

使用这两个库:"io.github.openfeign.form:feign-form:3.0.3“"io.github.openfeign.form:feign-form-spring:3.0.3”

可以为文件上传配置伪造,如下所示:

代码语言:javascript
复制
@Configuration
public class FeignConfiguration {

    @Autowired
    private ObjectFactory<HttpMessageConverters> messageConverters;

    @Bean
    public Encoder feignFormEncoder() {
        return new SpringFormEncoder(new SpringEncoder(messageConverters));
    }
}

然后像这样引用来自feign客户端的配置:

代码语言:javascript
复制
@FeignClient(name = "destination-microservice-id", configuration = FeignConfiguration.class)

MultipartFile接口的实现应该是什么,如何创建实例来处理来自客户端微服务的调用?当使用用于测试目的的Spring的MockMultipartFile实现时,它几乎都能正常工作。文件被传输,"someParam“值也被传输。但是,作为MultipartFile实例的其他字段的内容类型和文件名不会传递给服务器。

你知道该怎么做吗?

EN

回答 1

Stack Overflow用户

发布于 2018-01-15 17:02:16

要从您的客户端微服务应用程序调用您的feign客户端接口,您可以使用类似下面的代码。

代码语言:javascript
复制
public void uploadFile(File file) {

    DiskFileItem fileItem = (DiskFileItem) new DiskFileItemFactory().createItem("file",
                                                MediaType.TEXT_PLAIN_VALUE, true, file.getName());

    try (InputStream input = new FileInputStream(file); OutputStream os = fileItem.getOutputStream()) {
        IOUtils.copy(input, os);
    } catch (Exception e) {
        throw new IllegalArgumentException("Invalid file: " + e, e);
    }

    MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
    feignClient.uploadFile(multipartFile);
}

DiskFileItem类来自commons-fileupload library.Hope,它提供了帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48099136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档