SpringBoot微服务项目,转发并响应下载请求

这篇具有很好参考价值的文章主要介绍了SpringBoot微服务项目,转发并响应下载请求。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在微服务项目中,我经常会碰到从一个微服务项目转发下载请求并实现下载文件的需求,因此在此做一个转发下载的示例。总的下载转发流程如下,我会按照这个流程一一介绍下载流程。

 

SpringBoot微服务项目,转发并响应下载请求

 1、客户端的下载请求

这里主要介绍controller层是如何接收客户端发送请求的代码,接收参数的代码如下

@GetMapping(value = "downloadFile")
public void downloadFile( HttpServletResponse response) {


}

2、转发服务器的下载请求

转发服务器的下载请求主要通过Feign接口实现,具体实现代码如下:

Feign接口:

    @PostMapping(value = "/downloadFile")
    Response downloadFile();

Feign接口实现类:

    @Override
    public Response downloadFile() {
        return null;
    }

之后便可以利用Feign实现转发了controller层代码完善如下:

@GetMapping(value = "downloadFile")
public void downloadFile( HttpServletResponse response) {

        InputStream inputStream = null;
        try {
            Response serviceResponse = queryBranchService.downloadFile(url,sapNo);
        } catch (IOException e) {
            e.printStackTrace();
        }

}

3、最终服务器的下载请求响应

该代码的总体思路就是将文件变成输出流并写在响应中,并返回给转发服务器。

    @GetMapping(value = "downloadFile")
    public void downloadFile(HttpServletResponse response) {
        //获取upload文件夹的路径
        try {
            InputStream contentInput = OkHttpClientUtils.getImage(url, null);
            BufferedInputStream bufferedInputStream = new BufferedInputStream(contentInput);
            response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(sapNo+".png", "UTF-8"));
            BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());
            int length = 0;
            byte[] temp = new byte[1024 * 10];
            while ((length = bufferedInputStream.read(temp)) != -1) {
                bufferedOutputStream.write(temp, 0, length);
            }
            bufferedOutputStream.flush();
            bufferedOutputStream.close();
            bufferedInputStream.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            log.error(e.getMessage());
        } catch (IOException e) {
            e.printStackTrace();
            log.error(e.getMessage());
        }
    }

4、转发服务器的下载请求响应

对转发服务器的controller层再继续完善,完善的总思路拿到中转服务器的响应,并拿出响应中输入流再变成输出流回写给客户端文章来源地址https://www.toymoban.com/news/detail-422120.html

@GetMapping(value = "downloadFile")
public void downloadFile( HttpServletResponse response) {

        InputStream inputStream = null;
        try {
                   InputStream inputStream = null;
        try {
            Response serviceResponse = queryBranchService.downloadFile();
            Response.Body body = serviceResponse.body();
            inputStream = body.asInputStream();
            BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
            response.setHeader("Content-Disposition", serviceResponse.headers().get("Content-Disposition").toString().replace("[", "").replace("]", ""));
            BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());
            int length = 0;
            byte[] temp = new byte[1024 * 10];
            while ((length = bufferedInputStream.read(temp)) != -1) {
                bufferedOutputStream.write(temp, 0, length);
            }
            bufferedOutputStream.flush();
            bufferedOutputStream.close();
            bufferedInputStream.close();
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        } catch (IOException e) {
            e.printStackTrace();
        }

}

到了这里,关于SpringBoot微服务项目,转发并响应下载请求的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Nuxt项目asyncData服务端请求数据渲染

    或许有些人会比较喜欢在mounted里去请求数据 但在Nuxt项目中是绝对不能这样操作的 因为 mounted的特性也说的比较明白了 当页面挂载完之后执行 但显然 seo只读你页面挂载的内容 如果你在这请求 那么对不起 你请求回来的数据渲染到界面上seo爬虫是看不到的 Nuxt项目请求数据 可

    2023年04月08日
    浏览(34)
  • vue项目多个不同的服务器请求地址管理

    在vue项目开发过程中,获取不同的数据可能会出现需要请求多个不同服务器地址的域名,这个时候需要对不同域名的请求地址进行管理以及跨域的代理。 跨域配置: 在vue项目的vue.config.js文件中对devServer.proxy进行配置,如下: axios请求封装: 封装axios请求的js文件中配置如下

    2024年02月04日
    浏览(47)
  • Vue项目打包到服务器后请求接口报错404

    背景 :前端Vue项目打包后部署在服务器上,而后端接口在另外一台服务器。本地生产环境运行时因为在Vue中配置了proxy代理,所以项目运行正常。但是在服务器开发环境中,一直报错404。 原因 :在开发环境中设置了proxy代理后,打包时proxy代理就会失效,因为proxy代理并不会

    2024年02月09日
    浏览(50)
  • SpringBoot项目集成ElasticSearch服务

    本文已收录于专栏 《中间件合集》   Spring boot的版本是: 2.3.12   ElasticSearch的版本是:7.6.2   在我们的项目中经常会遇到对于字符串的一些操作,例如对于字符串的分词,通过一个词去查找对应的原文(全文搜索)。那可能有人就会问了,使用mysql的模糊查询也可以根据

    2024年02月12日
    浏览(42)
  • SpringBoot项目添加WebService服务

    1.简单描述 WebService简单理解就是用http发送接收xml数据,但这个xml得遵守系统的规范。这个规范就是WSDL(Web服务描述语言,Web Services Description Language)。 在WebService中传输的xml有一个正式的名称叫Soap(简单对象访问协议 Simple Object Access Protocol)。 WebService分为客户端和服务端

    2024年02月16日
    浏览(42)
  • 使用docker部署springboot微服务项目

    检查docker是否已安装 在/opt/目录下创建docker目录: 将在Idea中通过Maven打包好的可执行项目的jar包上传到服务器的/opt/docker目录下 项目中的yml配置文件中的服务端口为8096: 用于描述构建项目镜像的这个文件名必须是Dockerfile,无后缀,文件名不能随意起。否则构建时提示找不到

    2024年02月14日
    浏览(43)
  • SpringBoot项目部署到服务器

    此次用到了三个软件:IDEA、WinSCP、FinalShell 服务器的性能相比较本地有着更大的内存空间,运行程序代码会更加的快捷方便,而且服务器开启后,程序放在那边让它跑就好了。 一般的web项目想要放到服务器上运行的话,需要首先在服务器上装一个Tomcat,然后将项目打包成wa

    2024年02月04日
    浏览(55)
  • SpringBoot项目上传至服务器

    通过包管理器安装 参考链接: 1. 安装之后没有密码,所以需要设置密码,使用下面的语句 2.在数据库中建表(和本地方法一样)  1.在pop.xml进行配置 2.yml配置文件 3.打包( 设置打包名称) xShell直接拖过去就好 使用以下命令启动项目:   跟踪日志命令  

    2024年02月13日
    浏览(38)
  • springboot 微服务项目如何集成 html 页面

    Spring Boot 微服务项目通常是通过 REST API 来提供服务的,而不是直接集成 HTML 页面。 如果在 Spring Boot 项目中集成 HTML 页面,简单整理了一下,可以采用以下常用的方法: ** Thymeleaf :**Thymeleaf 是一款用于在 web 和独立环境中创建可扩展的 XML/HTML/文本模板的 Java 模板引擎。它可

    2024年02月11日
    浏览(36)
  • 在服务器上启动springboot项目

    环境搭建:要在服务器上运行SpringBoot Web项目,需要先在服务器上安装JDK(CentOS系统安装JDK参考:http://t.csdn.cn/0zYml) 创建一个简单的springboot项目,并通过测试; 执行maven的package命令,然后在target文件夹中找到jar包; 将生成的jar包放到服务器上,如果有用远程连接工具windt

    2024年02月16日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包