iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Feign之Multipartfile文件传输填坑
  • 329
分享到

Feign之Multipartfile文件传输填坑

2024-04-02 19:04:59 329人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

Multipartfile文件传输 1. 添加依赖 <dependency> <groupId>io.GitHub.openfeign.fOR

Multipartfile文件传输

1. 添加依赖


<dependency>
      <groupId>io.GitHub.openfeign.fORM</groupId>
        <artifactId>feign-form</artifactId>
        <version>3.3.0</version>
    </dependency>
    <dependency>
        <groupId>io.github.openfeign.form</groupId>
        <artifactId>feign-form-spring</artifactId>
        <version>3.3.0</version>
    </dependency>

2. 添加配置类


@Configuration
public class FeignMultipartConfig {
    @Bean
    @Primary
    @Scope("prototype")
    public SpringFormEncoder multipartFormEncoder() {
        return new SpringFormEncoder();
    }
    @Bean
    public feign.Logger.Level multipartLoggerLevel() {
        return feign.Logger.Level.FULL;
    }
}

3. 接口编写

@FeignClient使用配置类

@PostMapping设置


consumes = MediaType.MULTIPART_FORM_DATA_VALUE

使用@RequestPart(),不能使用@RequestParam()


@FeignClient(value = "face-service",configuration = FeignMultipartConfig.class)
public interface FaceClient {
 @PostMapping(value = "/search/student", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    ResponseBase<SearchStudentFaceVO> searchStudentFace(@RequestPart("file") MultipartFile file);
}

feign不能正常传递参数MultipartFile(文件)的解决

之前工作中有个业务场景:需要把文件以MultipartFile进行服务之间的调用(使用的是Feign),特此记录下踩到的坑

需要注意的是:使用默认的SpringCloud自带的spring-cloud-starter-openfeign是不支持传递文件的。

我看网上有很多使用feign-form和feign-form-spring支持的jar包,然后配置SpringFormEncoder,但我试了,没有成功,最后使用了另外一种方法,在此记录下吧:

方法一:使用外部依赖


 <dependency>
            <groupId>io.github.openfeign.form</groupId>
            <artifactId>feign-form</artifactId>
            <version>3.3.0</version>
        </dependency>
 
        <dependency>
            <groupId>io.github.openfeign.form</groupId>
            <artifactId>feign-form-spring</artifactId>
            <version>3.3.0</version>
        </dependency>

新建配置类:


package com.jsyd.ict.ictservicemanager.configuration;
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 feign.codec.Encoder;
import feign.form.spring.SpringFormEncoder;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MultipartSupportConfig {
    @Autowired
    private ObjectFactory<HttpMessageConverters> messageConverters;
    @Bean
    public Encoder feignFormEncoder() {
        return new SpringFormEncoder(new SpringEncoder(messageConverters));
    }
}

配置feign接口:


package com.jsyd.ict.ictservicemanager.feign;
import com.jsyd.ict.ictservicemanager.util.resp.RespUtil;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.WEB.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.InputStream;

@FeignClient(name = "ict-service-capacity", configuration = MultipartSupportConfig.class)
public interface CapacityFeign {
    @RequestMapping(value = "contentAudit/baiduImgAuditByFile", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    RespUtil baiduImgAuditByFile(@RequestPart(value = "file") MultipartFile file);
}

注意:文件的传输需要使用@RequestPart()注解

服务端:


    @RequestMapping(value = "/baiduImgAuditByFile", method = RequestMethod.POST)
    public RespUtil baiduImgAuditByFile(@RequestParam("file") MultipartFile file)  {
  // 调用service
        return null;
    }

结果发现,这样是获取不到结果的,研究了好一会,因为要着急联调,就没有继续跟踪了,有时间在深入研究下。

后来使用了下面的方法,成功传参

方法二:使用httpservletRequest获取

上述操作都不需要,即:不需要导入依赖,也不需要创建文件,只需要在服务端通过HttpServletRequest去设置

使用HttpServletRequest设置:

伪代码如下:


    @RequestMapping(value = "/baiduImgAuditByFile", method = RequestMethod.POST)
    public RespUtil baiduImgAuditByFile(MultipartFile file, HttpServletRequest request) {
        if (file == null) {
            // 解决服务间调用无法接受MultipartFile参数的问题
            String contentType = request.getContentType();
            if (contentType != null && contentType.toLowerCase().startsWith("multipart/")) {
                MultipartHttpServletRequest multipartRequest =
                        WebUtils.getNativeRequest(request, MultipartHttpServletRequest.class);
                if (multipartRequest != null) {
                    MultiValueMap<String, MultipartFile> multiFileMap = multipartRequest.getMultiFileMap();
                    for (Map.Entry<String, List<MultipartFile>> entry : multiFileMap.entrySet()) {
                        file = entry.getValue().get(0);
                    }
                }
            }
        }
        // 处理业务逻辑
        return null;
    }

主要说明如下图:

即通过HttpServletRequest 的方式即使文件获取不到,也可以进行特殊处理,从而获取文件。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Feign之Multipartfile文件传输填坑

本文链接: https://www.lsjlt.com/news/129513.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Feign之Multipartfile文件传输填坑
    Multipartfile文件传输 1. 添加依赖 <dependency> <groupId>io.github.openfeign.for...
    99+
    2024-04-02
  • Feign传递文件以及MultipartFile对象
    Feign微服务调用传递文件以及MultipartFile多媒体参数对象 上游服务提供者测试服务提供者 下游消费者异常原因错误解决方案通过Feign调用接口,来到jdk动态代理的invo...
    99+
    2023-09-14
    java spring 开发语言
  • Feign调用传输文件异常的解决
    1. Current request is not a multipart request feign接口参数使用 @RequestPart 而非 @RequestParam, 同时...
    99+
    2024-04-02
  • Springboot 上传文件或头像(MultipartFile、transferTo)
    目录1. 在配置文件中指定外部环境, 注入到代码中2. 设置上传文件的限制配置3. 设置外部路径映射到url4. 用户实体类中 加入 image 字段5. Controller层编写...
    99+
    2023-05-16
    Springboot 上传文件 Springboot 上传头像
  • vps之间如何传输文件
    VPS之间可以通过多种方式传输文件,以下是其中几种常见的方法:1. SCP(Secure Copy):SCP是基于SSH协议的一种安...
    99+
    2023-09-08
    vps
  • linux之间怎么传输文件
    在Linux之间传输文件有多种方法,下面列举了几种常用的方法:1. 使用scp命令:scp命令用于在不同的Linux服务器之间进行文...
    99+
    2023-09-17
    linux
  • Xshell传输文件
    Xshell传输文件 一、通过sftp 命令二、xftp三、rz上传 和 sz 下载 上传路径:介绍我们需要向Linux系统里面传东西。 下载路径:就是我们把Linux系统里面...
    99+
    2023-10-26
    服务器 网络 linux
  • 两台Linux之间怎么传输文件
    有多种方法可以在两台Linux之间传输文件,以下是其中一些常见的方法: 使用SCP(Secure Copy)命令:SCP命令可以通...
    99+
    2024-03-06
    Linux
  • 怎样在Linux系统之间传输文件
    这篇文章的内容主要围绕怎样在Linux系统之间传输文件进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!我第一次觉得Linux的强大是在学习Linux系...
    99+
    2023-06-28
  • linux服务器之间跳转、传输文件
    一、通过ssh跳转服务器 示例1 直接连接远程主机端口 前提条件: 两台服务器A、B;当前所在位置:服务器A;SSH服务已安装。 判断: 在服务器A中执行命令 ping B的IP地址 ,在能ping通的前提条件下 进入服务器A后,输入: s...
    99+
    2023-09-24
    服务器 运维
  • linux服务器之间如何传输文件
    在Linux服务器之间传输文件有多种方法,以下是其中一些常用的方法:1. SCP (Secure Copy):使用scp命令可以通过...
    99+
    2023-09-15
    linux 服务器
  • MultipartFile上传至服务器,文件名称中文乱码问题
    1.首先查看服务器是否设置为了zh_CN.UTF-8 输入命令:locale  不是则,进行查看服务器上是否有zh_CN.UTF-8 查看所有可以使用的字符编码集 输入命令:locale -a  如果没有可用的zh_CN.UTF-8 则...
    99+
    2023-09-01
    服务器 运维 spring boot
  • 使用MultipartFile怎么实现一个文件上传功能
    使用MultipartFile怎么实现一个文件上传功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一.主要有两个java类,和一般的servlet放在一起即可...
    99+
    2023-05-30
    multipartfile
  • 微服务之间如何通过feign调用接口上传文件
    具体需求: 我们的项目是基于springboot框架的springcloud微服务搭建的,后端服务技术层面整体上分为business服务和core服务,business服务用于作为应...
    99+
    2024-04-02
  • 微服务之间怎么通过feign调用接口上传文件
    这篇文章主要介绍“微服务之间怎么通过feign调用接口上传文件”,在日常操作中,相信很多人在微服务之间怎么通过feign调用接口上传文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”微服务之间怎么通过feig...
    99+
    2023-06-20
  • Oracle工具之--ASM与文件系统及跨网络传输文件
    Oracle工具之--ASM与文件系统及跨网络传输文件  Oracle DBMS_FILE_TRANSFER可以实现文件系统和ASM磁盘组之间实现文件传输及ASM磁盘组之间跨网络的传输。...
    99+
    2024-04-02
  • vue如何使用el-upload上传文件及Feign服务间传递文件
    这篇文章主要介绍了vue如何使用el-upload上传文件及Feign服务间传递文件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前端代...
    99+
    2024-04-02
  • Spring Cloud中怎么使用 Feign上传文件
    Spring Cloud中怎么使用 Feign上传文件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。加依赖<dependency> <groupId...
    99+
    2023-05-30
    springcloud feign
  • Java IO流学习总结之文件传输基础
    目录一、Java IO流总览二、File类2.1 常用API2.2 遍历目录三、RandomAccessFile类四、字节流4.1 FileInputStream4.2 FileOu...
    99+
    2024-04-02
  • 还在使用文件传输协议传输机密文件?你可能是对文件传输协议有什么误会
    文件传输协议(FTP)为用户提供了一种从一个位置临时向另一个位置发送文件和信息的简单方法。FTP提供了一种在计算机(或服务器)之间建立通信以进行文件传输的介质。尽管它仍然是一种广泛使用且被大众熟知的文件传输方法,但人们对FTP有诸多误解,以...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作