Feign在发送文件时,可以使用Feign-form。

另一种方式,关键就是,要将文件转成Resource,然后使用Spring的MultivalueMap

本次发送的是个对象,对象里含有 文件对象数组Multipartfile[]

前台是将 键值对和 文件都放到formdata里去。

发送前,将文件对象数组和属性都取出,放入multivaluemap,文件转成bytearrayresource

接收方,spring可以自动识别。

但是需要注意的是,接收方如果把multipartfile直接返回回来,是识别不了的,所以建议在接收方把 file属性进行序列化忽略。另外(该方式没有测试,不知道是否可行)或许可以把文件像调用方那样转成resource试试

  1. $(document).on('click','.submit',function () {
  2. var formData = new FormData();
  3. let arr = $("#rating").serializeArray();
  4. $(arr).each(function () {
  5. let name = this.name;
  6. let value = this.value;
  7. formData.append(name,value);
  8. });
  9. let eachEnd = true;
  10. $(".fj-ul li").each(function () {
  11. let $li = $(this);
  12. let fileid = $li.data("fileid");
  13. if(isNull(fileid)){
  14. let file = $li.data("file");
  15. if (file.size == 0) {
  16. utils.alerter.show("文件大小是0,不可上传");
  17. eachEnd = false;
  18. return eachEnd;
  19. }
  20. //10M
  21. if (file.size > 10 * 1024 * 1024) {
  22. utils.alerter.show("文件不可超过10MB");
  23. eachEnd = false;
  24. return eachEnd;
  25. }
  26. formData.append("files",file);
  27. }
  28. });
  29.  
  30. if(eachEnd){
  31. $.ajax({
  32. url:'save',
  33. type:'post',
  34. data: formData,
  35. processData: false,
  36. contentType: false,
  37. success:function (result) {
  38. if(result.isok){
  39.  
  40. }
  41. utils.alerter.show(result.msg);
  42. },
  43. error:function () {
  44. utils.alerter.show("请求失败");
  45. }
  46. });
  47. }
  48. });

  

对象:截图部分字段

调用方

  1. /**
  2. * 保存
  3. * @param rating
  4. * @return
  5. */
  6. @PostMapping("/save")
  7. @ResponseBody
  8. public ApiResult<BoCrmCusRating> save(BoCrmCusRating rating,HttpSession session){
  9. String loginname = (String) session.getAttribute(SSOLoginInterceptor.LOGINNAME);
  10. if(rating.getId()==null){
  11. rating.setCreateUser(loginname);
  12. }else{
  13. rating.setUpdateUser(loginname);
  14. }
  15. try {
  16. MultiValueMap map = beanToMultiMap(rating);
  17. return cusRatingFeign.save(map);
  18. } catch (Exception e) {
  19. logger.error("",e);
  20. return ApiResult.failResult("失败:"+e.getMessage());
  21. }
  22. }
  23.  
  24. /**
  25. * bean to map
  26. * @param t
  27. * @param <T>
  28. * @return
  29. * @throws IllegalAccessException
  30. */
  31. private static <T> MultiValueMap beanToMultiMap(T t) throws Exception {
  32. MultiValueMap<String,Object> map = new LinkedMultiValueMap<>();
  33. Class<?> clazz = t.getClass();
  34. Field[] fields = clazz.getDeclaredFields();
  35. for (Field field : fields) {
  36. field.setAccessible(true);
  37. Object o = field.get(t);
  38. if(!field.getName().equals("files")){
  39. map.add(field.getName(), o);
  40. }else{
  41. MultipartFile[] files = (MultipartFile[]) o;
  42. for (MultipartFile file : files) {
  43. ByteArrayResource resource = new ByteArrayResource(file.getBytes()){
  44. @Override
  45. public String getFilename() {
  46. try {
  47. return URLEncoder.encode(file.getOriginalFilename(),"UTF-8");
  48. } catch (UnsupportedEncodingException e) {
  49. throw new RuntimeException(e.getMessage());
  50. }
  51. }
  52. };
  53. map.add("files",resource);
  54. }
  55. }
  56. }
  57. return map;
  58. }

  

  1. /**
  2. * 保存
  3. * @return
  4. */
  5. @RequestMapping(value = "/save",method = RequestMethod.POST,consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
  6. ApiResult<BoCrmCusRating> save(MultiValueMap map);

  接收方

  1. /**
  2. * 保存
  3. * @return
  4. */
  5. @PostMapping("/save")
  6. public ApiResult<BoCrmCusRating> save(BoCrmCusRating rating){
  7. return cusRatingService.save(rating);
  8. }

  

Feign 发送对象,对象含多个文件的更多相关文章

  1. Feign发送Get请求时,采用POJO对象传递参数的最终解决方案 Request method 'POST' not supported (附带其余好几个坑)

    yml: feign: httpclient: enabled: true properties: #feign feign.httpclient.enabled=true <!-- https ...

  2. PHP如何通过Http Post请求发送Json对象数据?

    因项目的需要,PHP调用第三方 Java/.Net 写好的 Restful Api,其中有些接口,需要 在发送 POST 请求时,传入对象. Http中传输对象,最好的表现形式莫过于JSON字符串了, ...

  3. Qt 使用 lambda 表达式做为槽函数时为什么使用 QObject::sender() 获取到的发送信号对象指针为空?

    /*! Returns a pointer to the object that sent the signal, if called in a slot activated by a signal; ...

  4. File类的特点?如何创建File类对象?Java中如何操作文件内容,什么是Io流Io流如何读取和写入文件?字节缓冲流使用原则?

    重难点提示 学习目标 1.能够了解File类的特点(存在的意义,构造方法,常见方法) 2.能够了解什么是IO流以及分类(IO流的概述以及分类) 3.能够掌握字节输出流的使用(继承体系结构介绍以及常见的 ...

  5. C#开发微信门户及应用(19)-微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)

    我们知道,企业号主要是面向企业需求而生的,因此内部消息的交流显得非常重要,而且发送.回复消息数量应该很可观,对于大企业尤其如此,因此可以结合企业号实现内部消息的交流.企业号具有关注安全.消息无限制等特 ...

  6. 【ASP.NET Web API教程】5.3 发送HTML表单数据:文件上传与多部分MIME

    原文:[ASP.NET Web API教程]5.3 发送HTML表单数据:文件上传与多部分MIME 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面 ...

  7. 使用Feign发送HTTP请求

    使用Feign发送HTTP请求 在往常的 HTTP 调用中,一直都是使用的官方提供的 RestTemplate 来进行远程调用,该调用方式将组装代码冗余到正常业务代码中,不够优雅,因此在接触到 Fei ...

  8. PHP中面相对象对象的知识点整理

    面向对象 万物皆对象,将构成问题的事务分解到各个对象上,建立对象的目的不是为了完成一个工作,而是为了描述某个事务在解决问题中的行为,更符合人的思维习惯,代码重用性高,可扩展性. ___________ ...

  9. json 字符串转换成对象,对象转换成json字符串

    json   字符串转换成对象,对象转换成json字符串 前端: 方法一: parseJSON方法:   [注意jquery版本问题] var str = '{"name":&qu ...

  10. 导出不带.svn的文件夹或者是不含.class的文件

    转载自:http://blog.csdn.net/z278718149/article/details/21537395 如何导出不带.svn的文件夹或者是不含.class的文件 在工作环境中,有的时 ...

随机推荐

  1. BZOJ1996 HNOI2010合唱队(区间dp)

    设f[i][j][0/1]表示i~j这段区间上一次选择的是最左/最右人的方案数.转移显然. #include<iostream> #include<cstdio> #inclu ...

  2. P1407 [国家集训队]稳定婚姻

    题目描述 我国的离婚率连续7年上升,今年的头两季,平均每天有近5000对夫妇离婚,大城市的离婚率上升最快,有研究婚姻问题的专家认为,是与简化离婚手续有关. 25岁的姗姗和男友谈恋爱半年就结婚,结婚不到 ...

  3. 【BZOJ1565】【NOI2009】植物大战僵尸(网络流)

    [BZOJ1565][NOI2009]植物大战僵尸(网络流) 题面 BZOJ 洛谷 题解 做了这么多神仙题,终于有一道能够凭借自己智商能够想出来的题目了.... 好感动. 这就是一个比较裸的最小割模型 ...

  4. 米勒罗宾素性测试(Miller–Rabin primality test)

    如何判断一个素是素数 效率很高的筛法 打个表 (素数的倍数一定是合数) 就可以解决问题. 筛选法的效率很高,但是遇到大素数就无能为力了. 米勒罗宾素性测试是一个相当著名的判断是否是素数的算法 核心为费 ...

  5. 基础学习笔记之opencv(24):imwrite函数的使用

    http://www.cnblogs.com/tornadomeet/archive/2012/12/26/2834336.html 前言 OpenCV中保存图片的函数在c++版本中变成了imwrit ...

  6. 图像处理之中值滤波介绍及C实现

    1 中值滤波概述 中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号平滑处理技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值. 中值滤波的基本原理是把数字图像或数字序 ...

  7. vim,删除所有

    vim 删除所有内容:方法1: 按ggdG方法2: :%d

  8. mysql5.7 安装常见问题

    mysql 5.7安装要执行以下三个命令: 1.mysql install2.mysqld --initialize3.net start mysql 第一个命令可能会出现Install/Remove ...

  9. 基于javaWeb阶段下的Cookie和Session总结

    1. 会话技术   就是用户在使用浏览器浏览界面的时候,去访问多个页面后一次性关闭浏览器,这个过程叫会话,学习会话技术就是在客户端与服务器进行交互的时候为了能更好的保存数据.在java中会话技术只有C ...

  10. C/C++预处理宏的总结

    1.定义顺序的无关性 #define PI 3.14 #define TWO_PI  2*PI 这两句谁前谁后无所谓,因为预处理器不断迭代来实现宏替换,直到源文件中没有宏了才停止. 2. 宏变量变成字 ...