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

这篇具有很好参考价值的文章主要介绍了2023年4月21日-关于远程feign调用实现文件上传下载。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

二、代码实现文章来源地址https://www.toymoban.com/news/detail-420106.html

// 服务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

到了这里,关于2023年4月21日-关于远程feign调用实现文件上传下载的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 关于使用Feign来实现微服务之间的文件下载

    在微服务当中,不同的服务之间需要进行通信,不乏微服务之间使用feign进行文件的下载上传使用场景。下边介绍如何使用Feign来进行微服务之间的下载excel 背景 :前两天做的一个需求,需要专门为材积信息而新启一个服务,其他系统调用此服务来进行获取产品的一些材积信

    2024年02月14日
    浏览(8)
  • SpringCloud --- Feign远程调用

    SpringCloud --- Feign远程调用

    先来看我们以前利用RestTemplate发起远程调用的代码: 存在下面的问题: 代码可读性差,编程体验不统一 参数复杂URL难以维护 Feign是一个声明式的http客户端,官方地址:GitHub - OpenFeign/feign: Feign makes writing java http clients easier 其作用就是帮助我们优雅的实现http请求的发送,解决

    2024年02月05日
    浏览(5)
  • [RPC]:Feign远程调用

    [RPC]:Feign远程调用

    摘要:RestTemplate;Feign;远程调用; Feign是一个简化HTTP客户端编写的框架,通过声明式方式将远程服务调用封装成简单接口调用。 1.2.1 使用RestTemplate发送远程调用代码 要求:系统调用者在查询订单的同时,根据订单中包含的userId查询出用户信息,一起返回。 1.2.1.1 项目示例

    2024年02月10日
    浏览(9)
  • 【微服务】Feign远程调用

    【微服务】Feign远程调用

           📝个人主页: 五敷有你         🔥系列专栏: 微服务 ⛺️稳中求进,晒太阳 先来看我们以前利用RestTemplate发起远程调用的代码: 存在下面的问题: 代码可读性差,编程体验不统一 参数复杂URL难以维护 Feign是一个声明式的http客户端,官方地址:GitHub - OpenF

    2024年03月28日
    浏览(15)
  • 搭建feign远程调用环境

    在我的SpringCloud专栏中已经介绍过SpringCloud五大组件的环境搭建,各个环境的搭建都有详细的步骤讲解,之前我们说过各个服务搭建都是不依赖于之前的环境的,本节介绍的Feign服务间远程调用也是,本次也是侧重于环境搭建,Feign的作用我们之前已经介绍过了。可以查看:0

    2024年01月17日
    浏览(8)
  • 微服务远程调用Feign

    微服务远程调用Feign

    目录 RPC概述 什么是Feign? RibbonFeign对比 Feign的设计架构 Spring Cloud Alibaba快速整合Feign Spring Cloud Feign扩展 日志配置 契约配置 通过拦截器实现参数传递 自定义拦截器实现认证逻辑 超时时间配置 微服务之间如何方便优雅的实现服务间的远程调用? RPC 全称是 Remote Procedure Call ,

    2024年03月14日
    浏览(7)
  • Postman 如何调用文件上传下载接口

    Postman 如何调用文件上传下载接口

    文件导入导出是管理后台的通用功能,所以在接口写好后在没有前端页面使用Postman进行接口调用测试接口功能成为一个选择。 导出  在我们输入接口地址,token等候  点击send  发现下载的成为了乱码(如下图) 这明显不符合我们的预期期望,在send按钮旁边下拉框 选择Send And  D

    2024年02月11日
    浏览(33)
  • SpringCloud(七) Feign远程调用

    SpringCloud(七) Feign远程调用

    目录 一, RestTemplate远程调用存在的问题 二, Feign的远程调用 2.1 什么是Fegin 2.2 Feign的使用(代替RestTemplate) 1. 引入依赖 2. 添加注解  3. 编写Feign的客户端 4. 测试 5. 总结  2.3 自定义配置 1. 配置文件方式  2. Java代码方式  三, Feign使用优化 3.1 使用连接池 1. 引入依赖 2. 配置连接池

    2024年02月06日
    浏览(3)
  • Nacos整合Feign远程调用

    Nacos整合Feign远程调用

    Feign是一个声明式的http客户端,其作用就是帮助我们优雅的实现http请求的发送。 将Feign的Client抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,提供给所有消费者使用。 例如,将UserClient、User、Feign的默认配置都抽取到一个feign-api包中,所有微服务

    2024年02月10日
    浏览(8)
  • SpringCLoud——Feign的远程调用

    SpringCLoud——Feign的远程调用

    来看一下之前我们使用RestTemplate调用时编写的Contrriller代码: //        2. 利用RestTemplate发起HTTP请求 //        2.1 url 地址         String url = \\\"http://userserver/user/\\\" + order.getUserId(); //        2.2 发送http请求,实现远程调用         User user = restTemplate.getForObject(url,

    2024年02月07日
    浏览(6)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包