我使用Feign上传文件踩的坑,MultipartFile文件死活传不过去

Feign上传文件

基本信息:通过后台管理,更改APP端的头像。我是用feign来调用app端的修改头像接口。两个参数,string类型的userId和图片文件headImg.

什么样的坑

前端调用我的接口,通过form表单向我提交这两个参数。参数名分别叫userId和headImg。我的controller层接受到这两个参数后,向后传递,一直到feign。然而,我通过feign调用的app端的接口,图片的参数名叫headPortrait。我在feign里通过注解来指定图片文件的参数名,但是没用,死活传不过去。
我的controller层代码大概如下:

public class UserController{@Autowiredprivate Feign feign;@PostMapping("/headImg")public Result updateHeadImg(@RequestParam("userId") String userId, @NotNull MultipartFile headImg){//前端给我传图片使用的参数名是headImgreturn feign.updateHeadImg(userId, headImg);}}

我的feign代码大概如下:

@FeignClient(name="app-user-service")
public interface Feign{//前端给我传递的图片叫headImg,而我调用的接口,图片参数名叫headPortrait,所以此处我在@RequestPart注解中,指定图片文件的参数名叫headPortrait@PostMapping(value="/path", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)Result<Type> updateHeadImg(@RequestParam(value = "userId") String userId, @RequestPart(value="headPortrait") MultipartFile headPortrait);
}

我通过feign调用的远端接口代码大概如下:

public class AppUserController{@Autowiredprivate UserService userService;@PostMapping("/upHeadPortrait")public Result upHeadPortrait(@RequestParam("userId") String userId, @NotNull MultipartFile headPortrait){//这个别的微服务的接口,接收图片使用的参数名是headPortraitreturn userService.upHeadPortrait(userId, headPortrait);}}

我发现,无论我在feign中怎么指定参数名,图片文件到了远端接口,就是null,死活传不过去。

解决办法

我找不到问题所在,我觉得我在feign中已经指定了远端接口需要的图片的参数名。但是传不过去,我就很蛋疼。于是,我有了一个大胆的想法,把远端接口接收到的HttpServletRequest拿出来瞅瞅,瞅瞅到底我通过feign发起的request长什么样。
于是我在远端的接口里添加参数HttpServletRequest,把request里的parts拿出来瞅瞅。请看代码:

public class AppUserController{@Autowiredprivate UserService userService;@PostMapping("/upHeadPortrait")public Result upHeadPortrait(@RequestParam("userId") String userId, @NotNull MultipartFile headPortrait,HttpServletRequest request){//这个别的微服务的接口,接收图片使用的参数名是headPortraitCollection<Part> parts = request.getParts();logger.info(JSONObject.toJSONString(parts, true));return userService.upHeadPortrait(userId, headPortrait);}}

以下是logger打印出来的,parts的内容:

[{"contentType":"image/jpeg","headerNames":["content-disposition","content-type","content-transfer-encoding"],"inputStream":{"channel":{"open":true},"fD":{}},//看到这个name,我想骂娘"name":"headImg",//图片的大小"size":3734,//这是我上传的图片文件的名字"submittedFileName":"test-img-01.jpg"}
]

至此,破案了。并不是图片没有通过feign传递到远端接口,而是传递过去后,name不是headPortrait,而是叫headImg。也就是说,我通过feign里的注解@RequestPart的value属性指定的参数名,并不生效。最终决定参数名的,就是前端传递到我的controller的图片参数的名字。
这个坑,困扰了我一整天。我是实在想不到,在feign里指定参数名蛋用没有。如果你碰到相同问题,在我这里找到了答案,请给我点赞,我同你抱起来哭。

我使用Feign上传文件踩的坑,MultipartFile文件死活传不过去相关推荐

  1. 记一次lumen直接删除migration文件踩的坑

    用artisan创建了一个名叫:create_Consignees的migration迁移文件之后,发现打错大小写了,强迫症不能忍,然后就.直接在database/migration迁移文件夹中直接把 ...

  2. springboot文件上传服务器,SpringBoot: 浅谈文件上传和访问的坑 (MultiPartFile)

    本次的项目环境为 SpringBoot 2.0.4, JDK8.0. 服务器环境为CentOS7.0, Nginx的忘了版本. 前言 SpringBoot使用MultiPartFile接收来自表单的f ...

  3. python无法安装tensorflow_Windows上安装Tensorflow踩的坑

    前言 看到Rstudio中开始支持Tensorflow,本人是欣喜若狂的,同时TensorFlow官网从16年9月低开始支持windows安装了,不免想试试在自己的Windows上用R跑跑tensor ...

  4. SQL SERVER 2014 清理数据库日志文件踩的坑!

    先简单带一下.ldf和.mdf区别 .mdf:数据库数据文件,存放一个数据库的数据信息. .ldf:数据库日志文件,存放对该数据库的更新操作(增.删.改)的文件. 所在在还原数据库时很慢,还原成功后发 ...

  5. input file文件上传_微服务间的文件上传与下载-Feign

    一.文件上传 (1)服务提供者 使用一个MultipartFile接收上传的文件 /** (2)Feign的Client接口 服务门面-feign的接口 pom.xml <dependencie ...

  6. 2021-08-08ctf中的上传upload题目.user.ini绕过后缀黑名单过滤(同文件夹下有php文件突破口)

    从SUCTF 2019 CheckIn 浅谈.user.ini的利用 / 2019-08-28 08:59:00 / 转自loong大佬-来自先知社区 <span class="con ...

  7. uedit修改文件上传路劲,支持api文件接口

    首先修改一个东西ueditor/ueditor.config.js serverUrl: URL + "php/controller.php" 原来serverUrl: " ...

  8. 文件上传服务器保存形式,78.上传文件及在服务器保存文件到任意路径

    上传文件到服务器是一个常用的操作,而在服务器上保存文件就需要多多用心了.因为你不可能只在一个路径里保存文件,所以需要实践一下保存文件到任意位置.当然,前提是你的应用程序有这样的操作权限. 首先建立一个 ...

  9. ftp上传当天文件的方法_ftp自动上传文件,ftp自动上传文件的配置方法及使用教程...

    IIS7服务器管理工具具备所有服务器管理工具的功能,比如批量管理.同时它还有很多的自主研发功能.比如同步操作.到期提醒.数据安全和定期执行.当然适用的系统也有Windows和liunx操作系统.还支持 ...

最新文章

  1. 狼的故事14:必死的狮子
  2. SQL统计指定的一列多少种取值
  3. Razor Generator
  4. HTML+CSS+JS实现 ❤️仿切水果小游戏❤️
  5. 【To Read】LeetCode | Jump Game II(转载)
  6. iOS 12 真的能让旧款 iPhone 速度飞起吗?
  7. android ril.java_Android RIL的java框架
  8. 操作系统的 (program)loader(程序加载器)
  9. pageoffice动态模板填充JAVA,使用卓正PageOffice--动态填充Word文档
  10. mysql中预设的拥有_MySQL中预设的、拥有最高权限超级用户的用户名为
  11. python设置excel边框_用Python操作Excel电子表格?单元格边框如何设置?样式有哪些?...
  12. android朋友圈动态视频,Android实现微信朋友圈图片和视频播放
  13. 武汉大学计算机学院朱晓薇,基于SDN的TDMA体制星间网络架构设计
  14. Linux命令--tac(倒序查看文件所有内容)
  15. 项目管理~基于禅道敏捷开发的详细流程图,关键节点及描述,诠释敏捷开发实施细节
  16. 2022最新大厂Java面试集合,五面拿下阿里飞猪offer
  17. 怎么在html中使logo,如何用CSS3设计腾讯QQ LOGO?
  18. 智云通CRM:CRM数据库在经营客户中有什么作用?
  19. Dreamweaver CC 2018/64位下载地址及安装教程
  20. 2021年腾讯服务器维护,2021年研究报告

热门文章

  1. 从程序员代码“呼救”大破传销组织_聊掌握一门编程语言的重要性!
  2. 案例:淘宝点击关闭二维码
  3. Google在线翻译工具:Translatium for Mac支持big sur
  4. java七行情书_七行情书
  5. 命令行下批量下载网易相册
  6. Manifest merger failed with multiple errors问题解决
  7. 2018年区块链十大发展势头
  8. 分布式事务前看懂CAP、BASE
  9. windows 7正版才是王道
  10. Mysql 导入3亿数据