下载类似 mega.co.nz 的文件
Posted
技术标签:
【中文标题】下载类似 mega.co.nz 的文件【英文标题】:Download files like mega.co.nz 【发布时间】:2013-04-06 08:23:53 【问题描述】:今天我查看了 mega.co.nz,我对一些功能感到很兴奋。例如在下载页面中,它会在浏览器上下载文件,然后用 javascript 解密它们。
例如查看此链接以下载 png 文件:
https://mega.co.nz/#!7JRgFJzJ!efpJGWuPhYczLexY19ex82nuwfs4sR_DG4JXddeClH4
在此链接中,它将在浏览器中开始下载。我检查了检查元素中的网络选项卡,它会在完成文件的所有部分后使用 AJAX 下载部分文件,并将所有文件自动保存在计算机上的一个文件中!
我想知道他们是做什么的?你能解释或链接到一些关于在浏览器中下载文件的资源吗?
也可以只用 javascript 来完成,还是应该使用一些 flash 插件或类似的东西?
【问题讨论】:
是的,如果你下载一个大文件,系统会因为不断的分页而变慢 【参考方案1】:从 2020 年起,您可以使用 Service Workers 将您的自定义代码与浏览器的内置下载管理器无缝集成:https://developers.google.com/web/updates/2016/06/sw-readablestreams
我还猜想您应该有以下标头才能下载文件而不是查看文件:
headers:
'Content-Type': 'application/octet-stream',
'Content-Disposition': 'attachment; filename="your_filename.bin"',
就我个人而言,我发现这种方法在 Firefox 和 Google Chrome 中都能完美运行,而且我已经在生产中使用它。
【讨论】:
【参考方案2】:MEGAcmd
有megacmd,官方命令行界面。您也可以从 github 上的源代码构建它,地址为 https://github.com/meganz/MEGAcmd
megacmd
是 Mega SDK 的包装器,如果您决定自己编译它,您将需要与下面列出的 Mega SDK 相同的依赖项(在 ubuntu 上)。
有关使用的详细信息,请参阅MEGAcmd User Guide。
超级 SDK
可以按照github页面上的步骤编译的Mega SDK。它包括megacli
实用程序,它是一个用于同步和下载/上传的交互式外壳。
## compilation steps for ubuntu
git clone --depth 1 https://github.com/meganz/sdk megasdk
cd megasdk
sudo apt install libcurl4-openssl-dev libc-ares-dev libssl-dev libcrypto++-dev zlib1g-dev libsqlite3-dev libfreeimage-dev libswscale-dev
autogen.sh
./configure
make -j 8 ## pass the number of CPUs you have to speed up compilation
sudo make install
mega.py python 模块(已弃用)
对于那些在文本模式下搜索实际配方以下载链接的发现此问题的人,这里是一个使用 mega.py 模块的简单 python 脚本(使用 sudo pip install mega.py
安装它):
import sys
import getpass
#install the module with: 'sudo pip install mega.py'
from mega import Mega
email = '_your_megamail_@domain.com'
password = getpass.getpass(prompt='Mega password for :'.format(email))
mega = Mega('verbose': True)
m = mega.login(email, password)
m.download_url(sys.argv[1])
该脚本适用于 python 2.7,并采用 mega.nz 链接的 URL。
getpass 用于在控制台中安全地输入密码,以避免将密码存储在脚本中——如果您愿意对密码进行硬编码,那么在第 7 行设置它。
megatools
在大多数 Linux/posix 机器上,您可以从标准存储库安装 megatools,即
在 ubuntu/debian 上:
apt install megatools
在 MacOS 上:
brew install megatools
安装后,您会发现许多命令行实用程序,其中megadl
可以下载共享文件和您自己的文件。详情请见megadl -h
。
【讨论】:
【参考方案3】:使用 Blob 和 URL API 的多部分浏览器内下载器的基本实现是 here。它下载 4 个并发请求的文件并显示进度。请注意,似乎在 XHR 请求中设置 range
标头通常不是一个好主意,请查看 this topic。
下载时:
下载后:
另一个有趣的话题是从 Mega 实现暂停/恢复功能。当前浏览器的 XHR API 不提供该功能,因此您唯一的机会是下载多个小块并放弃小块的下载部分,这似乎也在 Mega 上完成。但是fetch
流式传输功能可以用于此目的,我还没有充分探索这一点,但它已记录在here。
顺便说一句,看看这些很棒的项目:
https://github.com/eligrey/FileSaver.js https://github.com/jimmywarting/StreamSaver.js【讨论】:
【参考方案4】:Mega 使用几种不同的方法来做到这一点:(截至 2013 年 11 月 27 日)
-
Filesystem API(Chrome/Firefox 扩展插件)
Adobe Flash SWF Filewriter(旧浏览器回退)
BlobBuilder (IE10/IE11)
MEGA Firefox 扩展(已弃用)
Arraybuffer/Blob(内存中)+a[download](对于支持[下载]的浏览器)
MediaSource(实验性流媒体解决方案)
存储在 IndexedDB 存储中的 Blob + a[download](Firefox 20+,对内存中 Blob 方法的改进)
(来源:https://eu.static.mega.co.nz/js/download_6.js)
【讨论】:
但我认为它也适用于 Firefox。我在这里找到了一个样本jsfiddle.net/kGLnP/5。此示例可在 chrome 和 firefox 上正确运行。但是它们对 safari 或 opera 等其他浏览器做了什么?我也可以用这些浏览器下载 mega.co.nz 链接.. 是的,您提供的示例 (jsfiddle.net/kGLnP/5) 应该适用于 Firefox,但仅适用于最新版本(版本 20 或更高版本,有关支持的更多信息,请参阅 developer.mozilla.org/en-US/docs/html/Element/a)。我刚刚阅读了 Mega 的 JavaScript 代码并更新了我的答案。 (它会回答你关于其他浏览器的问题。基本上,当他们不能使用纯JS的解决方案时,他们会求助于flash。) 哇,我昨天刚看到这个网站,正要问同样的问题。当我尝试下载游戏模组时,我很惊讶浏览器内立即开始下载,显示我的全速速度!!!我使用的是 FF 20.0.1。 roberto 的回答是否仍然是最新的?我尝试在 firefox 中从 mega.co.nz 下载一个大文件并禁用 flash,但它仍然有效。当尝试下载 大文件 时,firefox 要求批准存储超过 50MB,这让我认为他们使用 indexedDB。 不,它不是(真的)最新的,当前的下载脚本在这里:eu.static.mega.co.nz/download_46.js。我快速浏览了一下,添加了一些新功能,包括通过缓存提高性能(如您所料,使用 IndexedDB)。当我有时间阅读代码时,我会更新我的答案。以上是关于下载类似 mega.co.nz 的文件的主要内容,如果未能解决你的问题,请参考以下文章
为 AVD 配置 Samsung Galaxy Tab 3 设备
如何在网上批量下载类似的文件,或者直接把整个文件夹下载下来,链接看问题补充,谢谢!
Flutter - 以不可见模式保存音频/视频文件,类似于 Spotify/Youtube(离线下载)
客户电脑的ie6调用servlet下载附件,文件名总是一串乱码类似于“%E5%A5%A5%E8%BF%90%E4%BC%”