我在Spring Cloud上有客户端角色微服务和服务器角色微服务,我在客户端微服务上有FeignClient bean,方法接受MultipartFile,如下所示
@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));
}
}然后像这样引用来自feign客户端的配置:
@FeignClient(name = "destination-microservice-id", configuration = FeignConfiguration.class)MultipartFile接口的实现应该是什么,如何创建实例来处理来自客户端微服务的调用?当使用用于测试目的的Spring的MockMultipartFile实现时,它几乎都能正常工作。文件被传输,"someParam“值也被传输。但是,作为MultipartFile实例的其他字段的内容类型和文件名不会传递给服务器。
你知道该怎么做吗?
发布于 2018-01-15 17:02:16
要从您的客户端微服务应用程序调用您的feign客户端接口,您可以使用类似下面的代码。
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,它提供了帮助。
https://stackoverflow.com/questions/48099136
复制相似问题