大文件下载优化方案(nginx+Springboot+vue)---非常完美

这篇具有很好参考价值的文章主要介绍了大文件下载优化方案(nginx+Springboot+vue)---非常完美。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、背景:

系统中有个文件下载的功能,下载的文件从1k-几十G不等,小文件下载没有问题,只要上G了,下载大概率失败。基于以上现状,对技术方案记性优化。

2、历史方案:

2.1 服务器读取文件流传输+前端blob接收

描述:

  • 后端接口通过response的IO通道,读写文件流传输
  • 前端接收Blob数据,等所有接收完成,再保存成文件

优点:传统方案,方案固定好写

缺点:文件先读到内存再输出,存在服务器压力;大文件传输过程中客户端和服务器的连接管道容易断开:broken pieped;前端接收内存压力;进度需要自己记录和计算;

2.2 使用NIO读取写入(同上)

描述:传输速度比BIO能快10倍以内

优缺点同上;

2.3 分片下载

描述:前端和后端都使用分片下载,等前端把所有的分片下载完成再合并成一个文件;

优缺点同上;能减少连接断开的概率;

3、完美方案:

目标:有进度显示;能正常下载完成;多人下载无压力;

描述:

  1. 进度显示:前端使用window.location.href=下载文件连接  的形式;
  2. 后端接口改成GET接口,参数拼接在url后面,包括token:因为href是新启动一个请求,并且header不能自定义,所以接口的鉴权只能放在url后面;
  3. 后端接口对url参数和token进行验证;
  4. 开始后端接口逻辑:
  5. 获取文件路径,设置response的header属性,重定向到Nginx配置的内部文件路由
  6. nginx返回文件信息
  7. 浏览器接收并在下方显示下载进度

Nginx.conf配置

location /ngdownload {
            alias /opt/data;#文件目录的前缀
            internal;#标识内部接口
}

Java代码:文章来源地址https://www.toymoban.com/news/detail-579135.html

public void downloadByLink(HttpServletResponse response, String fileId) {
        //查询附件信息
        File file = getFile();//自己实现
        //鉴权实际已经通过gateway完成
        try {
            String fileName = URLEncoder.encode(file.getName(), "UTF-8");
            //Content-Disposition 表示文件的下载方式,attachment 表示文件需要下载,而不是在浏览器中打开
            response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
            //设置URI给nginx进行内部的跳转/ngndownload
            response.setHeader("X-Accel-Redirect", "/ngndownload" + fileName ); 
            //限速 尽量不设置
            response.setHeader("X-Accel-Limit-Rate", "202400"); 
        } catch (UnsupportedEncodingException e) {
            log.error("文件下载失败 ", e);
            throw new BusinessException("文件下载失败");
        }
    }

到了这里,关于大文件下载优化方案(nginx+Springboot+vue)---非常完美的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Nginx搭建文件下载服务器

    一、在本机搭建文件服务器 1、修改配置文件: 2、修改好配置文件后,创建相对应的目录 3、重启nginx,访问页面http://localhost:80/ 注意:如果访问页面报403的错误,这个是因为权限的问题,首先这里我们修改了启动nginx的用户为root,root的最高权限账户,所以不存在用户权限的问

    2024年02月16日
    浏览(28)
  • Nginx搭建文件下载服务器教程!

    搭建基于Nginx的文件下载服务器非常简单。以下是教程: 安装Nginx: 在终端中执行以下命令以安装Nginx: 配置Nginx: 打开Nginx配置文件进行编辑: 修改配置文件: 在  http 块内添加以下配置: 保存并关闭配置文件: 按下  Ctrl + X ,然后输入  Y 来保存更改并关闭编辑器。 测

    2024年02月07日
    浏览(41)
  • 使用 Nginx 搭建文件下载服务器

      版权声明:本文为CSDN博主「杨群」的原创文章,遵循 CC 4.0 BY-SA版权协议,于2023年8月27日首发于CSDN,转载请附上原文出处链接及本声明。   原文链接:https://blog.csdn.net/u011046671/article/details/132526618   操作系统:microsoft Windows 10 专业版   nginx 版本:1.25.1   使用

    2024年02月06日
    浏览(41)
  • CentOS用nginx搭建文件下载服务器

      Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动。在工作中,我们经常会用到需要搭建文件服务器的情况,这里就以在linux下搭建文件服务器为例,解释编译nginx和搭建服务

    2024年02月02日
    浏览(40)
  • 微信H5下载文件、微信浏览器无法下载文件解决方案

    手机端的微信访问网页的时候,是禁止直接下载文件的 但是IOS端可以预览.txt/.doc/.docx/.xls/xlsx/.pdf等格式的文件,Android端在下载这些格式的文件时,可以唤起 ‘即将离开微信,在浏览器打开’ 提示 所以,根据手机微信的这些限制,考虑在下载文件时,使Android微信在下载任何

    2024年02月16日
    浏览(68)
  • 纯nginx制作文件上传下载服务器

    webdav 是一组超文本传输协议的技术集合,有利于用户键协同编辑和管理存储在万维网服务器文档。同时来说就是,webdav可以让用户直接存储,下载,编辑文件,操作文件需要进行用户认证 需要的环境 linux上需要下载git(用来拉取镜像) nginx版本为:nginx-1.22.0.tar.gz 至此,需要

    2024年02月15日
    浏览(36)
  • 通俗易懂【Springboot】 单文件下载和批量下载(多个文件合成一个压缩包下载)

    1.简单理解文件下载 文件下载,是从服务器下载到本地电脑。 文件下载的原理,首先通过IO流将服务器的文件读取到内存里(只有将数据读到内存,电脑才可以操作数据),读取后文件数据存放在内存中,将内存中的数据通过网络发送给本地客户端的浏览器。本地客户端的浏

    2024年02月08日
    浏览(34)
  • java大文件上传,大文件下载解决方案

    普通的Servlet文件上传: 使用Java Servlet技术,通过表单提交文件,然后在服务器端使用流将文件写入磁盘。这适用于小文件,但不太适合大文件,因为需要将整个文件加载到内存中。 Apache Commons FileUpload: 这是一个常用的开源库,用于处理文件上传。它支持流式处理文件,适

    2024年01月20日
    浏览(29)
  • springboot文件下载

    Spring Boot 文件下载是指从 Web 应用程序中下载文件的过程。 要在 Spring Boot 中实现文件下载功能,你需要做以下几件事: 在 Spring Boot 项目中添加对 Servlet 和 Apache Commons FileUpload 的依赖。 创建一个控制器方法来处理文件下载请求。 使用 ResponseEntity 对象将文件内容和相关信息作

    2024年02月16日
    浏览(20)
  • http文件上传下载方案

    后端生成文件,返回二进制给前端 案例 设置 Content-Type 未对应文件的 MIME类型 将文件内容二进制写入http body 后端返回数据,前端生成文件 案例报文:

    2024年02月12日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包