千家信息网

springcloud怎么使用Feign后台内部传递MultipartFile

发表于:2024-10-25 作者:千家信息网编辑
千家信息网最后更新 2024年10月25日,这篇文章主要介绍了springcloud怎么使用Feign后台内部传递MultipartFile,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了
千家信息网最后更新 2024年10月25日springcloud怎么使用Feign后台内部传递MultipartFile

这篇文章主要介绍了springcloud怎么使用Feign后台内部传递MultipartFile,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

如何使用Feign后台内部传递MultipartFile

先修改Feign Client接口

 import feign.codec.Encoder;import feign.form.spring.SpringFormEncoder;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.context.annotation.Bean;import org.springframework.http.MediaType;import org.springframework.web.bind.annotation.DeleteMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RequestPart;import org.springframework.web.multipart.MultipartFile; /** * @author linli * @date 20-06-27 */@FeignClient(value = "upload", fallbackFactory = UploadFallbackFactory.class, configuration = UploadClient.MultipartSupportConfig.class)public interface UploadClient {     @PostMapping(path = "/upload-text", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)    String uploadText(@RequestPart(name = "file") MultipartFile file);     /**     * 引用配置类MultipartSupportConfig.并且实例化     */    class MultipartSupportConfig {        @Bean        public Encoder feignFormEncoder() {            return new SpringFormEncoder();        }    }}

若SpringFormEncoder 引入报错,加上下面的依赖

    io.github.openfeign.form    feign-form        3.3.0        io.github.openfeign.form        feign-form-spring        3.3.0

内部调用

private String uploadFile(String str) {        FileOutputStream fos = null;        FileInputStream fis = null;        MultipartFile multipartFile = null;        byte[] bt = str.getBytes();        File file = null;        try {            file = File.createTempFile("file" + UUID.randomUUID(), ".txt");            fos = new FileOutputStream(file);            fos.write(bt, 0, bt.length);            fis = new FileInputStream(file);            multipartFile = new MockMultipartFile("file", file.getName(),                    MediaType.TEXT_PLAIN_VALUE, fis);        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } finally {            if (fis != null) {                try {                    fis.close();                } catch (IOException e) {                    e.printStackTrace();                }            }            if (fos != null) {                try {                    fos.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }        return uploadClient.uploadText(multipartFile);    }

注意点

Feign进行跨服务传递MultipartFile文件

通过调用服务进行文件上传,避免每个需要上传文件的模块都写一遍上传服务,造成代码冗余。

本文主要包含通过feign进行文件上传模块。

使技术人员在开发过程中遇到问题时有地可查,有章可循。

通过feign进行跨服务传递MultipartFile文件

添加依赖

   io.github.openfeign.form   feign-form   3.0.3   io.github.openfeign.form   feign-form-spring   3.0.3

添加配置文件

package com.ruiyi.twowayreferral.configurer;import feign.codec.Encoder;import feign.form.spring.SpringFormEncoder;import org.springframework.beans.factory.ObjectFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.autoconfigure.http.HttpMessageConverters;import org.springframework.cloud.openfeign.support.SpringEncoder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class MultipartSupportConfig {   @Autowired   private ObjectFactory messageConverters;   @Bean   public Encoder feignFormEncoder() {       return new SpringFormEncoder(new SpringEncoder(messageConverters));   }}

代码示例

@FeignClient(value = "controller-center")public interface CallFrignService {    /**     * @Create 文件上传 wanggx_ruiyi 2019.11.15     * @param uploadPath 文件上传地址     * @param file 上传的文件     * @return     */   @PostMapping(value = "/api/v1/common/file/fileUpload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)   String fileUpload(@RequestParam(value = "uploadPath", required = true) String uploadPath,@RequestPart(value = "file", required = true) MultipartFile file);}

感谢你能够认真阅读完这篇文章,希望小编分享的"springcloud怎么使用Feign后台内部传递MultipartFile"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

0