跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • [求助] Web 项目中大文件下载的解决方案(大于 1GB)
未分類
11 5 月 2020

[求助] Web 项目中大文件下载的解决方案(大于 1GB)

[求助] Web 项目中大文件下载的解决方案(大于 1GB)

資深大佬 : cqxxxxxxx 12

现在已经有一个基于 vue+axiso 的下载功能,因为目前下载的文件都比较大( 500M 往上) 所以考虑到可能的因为各种原因导致的传输失败问题,需要提供恢复(继续)下载的功能。

考虑方案如下:

  1. 服务端把文件切分成 N 个小文件,前端进行 N 次请求后合并成一个文件。

  2. 基于 Http 的 Range 请求头处理

  3. 基于 ws 进行下载,也是跟 range 类似,其实跟 http 没什么区别

  4. 直接使用 chrome 的下载管理,chrome 支持暂停,继续的功能

其他: 各种在线网盘是如何实现类似功能的?

个人倾向于 2 来做,但是找不到前端的 demo,不知道怎么能把字节流持续写入到某个文件或者前端对象里。

大佬有話說 (15)

  • 資深大佬 : fancy111

    123 可以结合的。 自己可以写

  • 資深大佬 : murmur

    百度盘的解决方案是大于某个尺寸必须上客户端,我认为这个还真的靠谱

  • 資深大佬 : yeze322

    建议 4,server 只负责提供一个下载链接,剩下的事情交给 downloader 。

    特例:除非你们对安全性有要求,需要 client 一直保持认证状态。

  • 資深大佬 : napsterwu

    个人建议文件直接丢给对象存储或者 nginx,都原生实现了后台你要的分片分段的。前端的话,直接在新 tab 打开下载链接,js 应该是没法操作文件系统的。

  • 主 資深大佬 : cqxxxxxxx

    @fancy111 目前后端我已经支持了基于 range 请求头来下载指定位置的数据,我不清楚前端需要怎么写。。想求个 demo,怎么通过 ajax 或者 axiso 或者其他的把字节流持续写入到某个地方。目前用 axiso 它需要整个请求全部完成后才能执行回调方法。=。=

  • 主 資深大佬 : cqxxxxxxx

    @napsterwu 基于 nginx 的有关键字吗,我之前倒是没考虑过这个。感觉有可能可以满足我的需求啊。

  • 資深大佬 : killergun

    上传的时候将文件分片

  • 資深大佬 : murmur

    这里分析下客户端的合理性,因为国内的网络各种奇葩,连续下载大文件会到一定时间开始疯狂掉速,浏览器暂停再开起没用,停止重下断点续传又没有了。而且大文件下载的天生问题就是时间长,为了防止盗链,网盘带 token 都是常规设计,如果你下的慢的话,下一半 token 超时,自然被切断,断点续传都没法做。想来想去,这么多奇葩问题,可能国内客户端真的最好的解决方案。

  • 資深大佬 : ohao

    使用 Chrome 浏览器, 体验下 Mega 的上传和下载 mega.nz
    传个大点的文件试试 然后下载, 你就学会了

  • 主 資深大佬 : cqxxxxxxx

    @ohao 是的,我之前也想参考下 Mega,但是一直下载速度 0B/S, 我再去试试

  • 主 資深大佬 : cqxxxxxxx

    @murmur 客户端不受浏览器限制,比较自由。

  • 資深大佬 : qq316107934

    Mega 并不是一个优秀的例子,JS 下载文件都是先放在内存里的,然后再组装以 blob 形式存盘,这样对计算机内存大小有要求,同时并不支持刷新后断点续传,想要稳定好用还是交给 Chrome 的下载管理器吧,Mega 这类用 JS 是额外的加解密需求

  • 主 資深大佬 : cqxxxxxxx

    @qq316107934 是的,我刚刚浏览了下相关文章发现 blob 大小还是有限制的。目前只是有个基于请求头的权限校验需求。

  • 資深大佬 : marcushbs

    一开始用百度网盘,后来发现微云支持 http 直接下载,果断换坑

  • 資深大佬 : wanguorui123

    直接打开链接,链接里面签个过期时间或者加密个过期时间,防止盗链

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具