Java SpringCloud虚拟多部分文件上传
我在SpringCloud上有客户端角色microservice和服务器角色microservice 我在客户端microservicewith方法上假装客户端bean接受这样的多部分文件Java SpringCloud虚拟多部分文件上传,java,spring,multipartform-data,spring-cloud-feign,Java,Spring,Multipartform Data,Spring Cloud Feign,我在SpringCloud上有客户端角色microservice和服务器角色microservice 我在客户端microservicewith方法上假装客户端bean接受这样的多部分文件 @RequestMapping(value = {"/files"}, consumes = {"multipart/form-data"}, method = {RequestMethod.POST} ) ResponseEntity uploadFile(@RequestBody MultipartFil
@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:false-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接口的实现应该是什么,以及如何创建实例以继续从客户端microservice调用?
当使用来自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库。希望有帮助。除MockMultipartFile之外的另一个实现是Spring的CommonMultipartFile类。我见过这个实现,但它看起来像是为服务器端处理创建的。我尝试了这个解决方案,在服务器端,但在客户端没有看到错误将数据室上传到[[datauploadClient#uploadFile(MultipartFile,String,String,String,String,boolean)]期间出现400错误:[400]:[]是否可以增加服务器端的日志记录以查看问题?