feign调用服务之间传递MultipartFile相关问题

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>
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值