feign调用服务之间传递MultipartFile相关问题
一、InputStream转MultipartFile细节
InputStream inputStreamExcel = new ByteArrayInputStream(bytes);
//注意这里的第一个参数businessFile 文件的名字
MultipartFile file = new MockMultipartFile("businessFile", inputStreamExcel);
//之所以在服务之间调用为null的原因可以看一下FileItem
二、准备feign传文件调用之前的配置
1.MultipartSupportConfig配置文件
/**
* @ClassName MultipartSupportConfig
* @Author gyh
* @Date 2021/12/4 16:12
**/
//@Configuration 加上MultipartSupportConfig中的方法会影响其他接口的传参问题
public class MultipartSupportConfig {
@Autowired
private ObjectFactory<HttpMessageConverters> messageConverters;
@Bean
@Primary
@Scope("prototype")
public Encoder feignFormEncoder() {
return new SpringFormEncoder(new SpringEncoder(messageConverters));
}
}
2.上传文件服务
//调用方法
private void processingBaseTables(String fileName, MultipartFile businessFile){
thirdModuleFeign.uploadByFileName(businessFile, fileName);
}
/**
* 文件上传服务Feign
*/
@FeignClient(name = "service-file",configuration = MultipartSupportConfig.class)
public interface ThirdModuleFeign {
/**
* 上传文件
* @param file 文件
* @param fileName 文件名称
*/
@PostMapping(value="/api/upload",consumes=MediaType.MULTIPART_FORM_DATA_VALUE)
String uploadByFileName(@RequestPart("businessFile") MultipartFile businessFile, @RequestParam("uploadFileName") String uploadFileName);
3.文件上传服务(当MultipartFile为null时如何处理)
/**
*这里的businessFile要与所传文件名保持一致,否则这里将会读到null
*/
@PostMapping(value="/api/upload",consumes= MediaType.MULTIPART_FORM_DATA_VALUE)
public String uploadByFileName(@RequestPart("businessFile") MultipartFile businessFile,HttpServletRequest request, @RequestParam("uploadFileName") String uploadFileName){
//StandardServletMultipartResolver Springboot默认文件传输类型
//若这里businessFile真的读到了null,可以在请其中HttpServletRequest request,查看一下文件的名称是否是businessFile
// try {
// Collection<Part> parts = request.getParts();
// System.out.println(parts);
// /**打印结果
// * [
// * {
// * "contentType":"multipart/form-data; charset=ISO-8859-1",
// * "headerNames":["content-disposition","content-type","content-transfer-encoding"],
// * "inputStream":{
// * "channel":{
// * "open":true
// * },
// * "fD":{}
// * },
// 重点重点!!!!!
// * "name":"businessFile", //SpringMultipartFile的文件名也是参数中取的KEY
// * "size":15449,//文件大小
// * "submittedFileName":"1.txt"//上传文件的原名
// * }
// * ]
// */
// } catch (Exception e) {
// e.printStackTrace();
// }
//TODO 上传文件业务代码
return null;
}
<!--openFeign依赖-->
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form</artifactId>
<version>3.8.0</version>
</dependency>
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form-spring</artifactId>
<version>3.8.0</version>
</dependency>