首页 > 其他分享 >2023年4月21日-关于远程feign调用实现文件上传下载

2023年4月21日-关于远程feign调用实现文件上传下载

时间:2023-04-21 09:25:13浏览次数:44  
标签:feign 21 上传下载 busType springframework file org import new

一、客户需求:做一个查询程序,客户提供一个excel模板,将查询结果保存到excel模板中,上传到文件服务,供客户下载使用。

二、代码实现

// 服务A,文件上传
@ApiOperation("上传文件-demo")
@PostMapping(value = "/uploadDemo/{busType}/{billId}")
public ResBean uploadFile(@PathVariable("busType") String busType,
                                          @PathVariable("billId") String billId,
                                          @RequestParam(value = "file")  MultipartFile file
                                         )  {
  
  /**
  ......省略上传逻辑
  */

  return null;
}
// 服务B,feign客户端
package com.xxxx.remote;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Repository;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
@Repository
@FeignClient(name = "xxxxx")
public interface FeignClient {
    @PostMapping(value = "/xxxx/xxxx/{busType}/{billId}"
            , produces = {MediaType.APPLICATION_JSON_UTF8_VALUE}
            , consumes = MediaType.MULTIPART_FORM_DATA_VALUE
    )
    ResBean uploadFile(@PathVariable("busType") String busType,
                                       @PathVariable("billId") String billId,
                                       @RequestPart("file") MultipartFile file

    );
}
// 服务B,业务层
public ResBean optexcel() throws IOException {
        List<UserEntity> dataList = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            UserEntity userEntity = new UserEntity();
            userEntity.setName("张三" + i);
            userEntity.setAge(20 + i);
            userEntity.setTime(new Date(System.currentTimeMillis() + i));
            dataList.add(userEntity);
        }
        //生成excel文档
        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("用户","用户信息"),
                UserEntity.class, dataList);
        MultipartFile file = workbookToCommonsMultipartFile(workbook, "用户.xls");

        ResBean resbean = this.FeignClient.uploadFile(
               "xxxxxx",
               "111222333",
                file
                );
        return resbean;
    }
    public static MultipartFile workbookToCommonsMultipartFile(Workbook workbook, String fileName) {
        FileItemFactory factory = new DiskFileItemFactory(16, null);
        FileItem fileItem = factory.createItem("file", "text/plain", true, fileName);
        try {
            OutputStream os = fileItem.getOutputStream();
            workbook.write(os);
            os.close();
            MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
            return multipartFile;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
总结:
  坑1:不加如下注解,
  produces = {MediaType.APPLICATION_JSON_UTF8_VALUE}
  consumes = MediaType.MULTIPART_FORM_DATA_VALUE
  报错信息:
  Current request is  not a multipart request
  坑2:不使用@RequestPart
  报错信息:the request was rejected because no multipart boundary was found
  坑3:workbookToCommonsMultipartFile中factory.createItem方法中,第一参数,要和@RequestPart注解中value值一致
  不一致报错信息:
  Required request part 'file' is not present
  坑4:上传到服务器的excel重新下载后,打开时,会提示文件损坏
  这时候需要给excel做一下授信,授信成功,就可以正常打开了。
  授信操作参考:https://jingyan.baidu.com/article/c85b7a64a7337d413aac9555.html

标签:feign,21,上传下载,busType,springframework,file,org,import,new
From: https://www.cnblogs.com/public-communion/p/17338082.html

相关文章

  • 2023年4月21日08:29:28
    昨天学了一天怎么去写博客,进度什么的比较慢,但是我的收获很大,看懂了很多以前没有看懂的东西,很高兴。今天先把材料写好,然后再开始学习博客,争取在星期天的的00:00之前把博客写完。学博客的时候,要去理解,自己不要沉溺在刷课的快感中,你要真正学到 东西才是最重要的。理解它们跑的逻辑......
  • SDUTOJ 2128 树结构练习——排序二叉树的中序遍历
    树结构练习——排序二叉树的中序遍历TimeLimit:1000MSMemorylimit:65536K题目描述在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值(2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值(3).任意一个节......
  • HTML实现文件上传下载功能实例解析
    ​ 前言文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。那有没有......
  • Feign传递参数
    传递单个参数1客户端@RequestMapping("/one")publicBaseRespone(@RequestParam("id")Integerid);服务端@RequestMapping("/one")publicBaseRespone(@RequestParam("id")Integerid){returnnewBaseRe......
  • 22 21 | 高性能设计,一切都围绕着契约精神
    你好,我是乔新亮。这一讲,我们来聊聊如何实现架构的高性能设计。前面我们讲过,产品思维有两个核心关键词:“契约精神”和“洞察人性”。其实高性能设计,也和契约精神是密切相关的。我将其总结为:高性能设计,一切围绕着契约精神。你可能会想,高性能设计不就是可以支撑大流量、高并发的架......
  • 21 20 | 高可用设计,让产品没有后顾之忧
    你好,我是乔新亮。这一讲,我想和你聊聊,关于高可用设计的那些事儿。一提起高可用设计,很多同学立刻就会想到“冗余设计”、“故障转移”等关键词。确实,在大部分与高可用相关的分享里,这两个词往往会被重点强调。所谓“冗余设计”,是指要通过集群来替代单点服务,做好冗余备份。单点架构......
  • C# Web实现文件上传下载功能实例解析
    ​IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头。 一. 两个必要响应头Accept-Ranges、ETag        客户端每次提交下载请求时,服务端都要添加这两个响应头,以保证客户端和服务端将此下载识别为可以断点续传......
  • PHP Web实现文件上传下载功能实例解析
    ​ 一、概述 所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载。在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了。一般断点下载时才用到Range和Content-Range实体头。HTTP协议本身不支持断点上传,需要自己实现。 二、Range  用于请求头......
  • Oracle MySQL Server 拒绝服务漏洞(CVE-2023-21912) 修复
    CVE编号公告标题和摘要最高严重等级受影响的软件CVE-2023-21912OracleMySQLServer拒绝服务漏洞未经身份验证的远程攻击者可通过MySQL协议网络访问MySQLServer,成功利用此漏洞可导致目标MySQLServer挂起或频繁重复崩溃,造成拒绝服务攻击重要MySQLServer<=5.7.41......
  • [PA2021] Od deski do deski (dp)
    计数数列个数,要满足能划分为若干个两端相等区间。首先容易想到DP。我想的是按段分阶段转移,显然不行,因为很容易算重,一个数列能有多种划分方案则会被算多次。因此直接计数数列的每位,\(g(i,j)\)表示前\(i\)位有\(j\)种值存在位置的前一位往前的数列为合法序列的合法序列方案数,\(f(......