春云假装分片上传



我在Spring Cloud上有客户端角色微服务和服务器角色微服务我在客户端微服务上有 FeignClient bean,方法接受这样的多部分文件

@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">

可以像这样为文件上传配置假装:

@Configuration
public class FeignConfiguration {
    @Autowired
    private ObjectFactory<HttpMessageConverters> messageConverters;
    @Bean
    public Encoder feignFormEncoder() {
        return new SpringFormEncoder(new SpringEncoder(messageConverters));
    }
}

然后像这样从假装客户端引用配置:

@FeignClient(name = "destination-microservice-id", configuration = FeignConfiguration.class)

MultipartFile 接口的实现应该是什么,以及如何创建实例以从客户端微服务继续调用?当使用来自 Spring 的 MockMultipartFile 实现时,它旨在用于测试目的,它大部分工作。文件被传输,"someParam"值也被传输。但是,作为 MultipartFile 实例的其他字段的内容类型和文件名不会传递到服务器。

有什么想法吗?

若要从客户端微服务应用调用假客户端接口,可以使用类似以下内容。

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 库。希望对您有所帮助。

相关内容

  • 没有找到相关文章

最新更新