下载mega.co.nz等文件

时间:2013-04-14 00:49:43

标签: javascript flash download

今天我检查了mega.co.nz,我很兴奋一些功能。 例如,在下载页面中,它将在浏览器上下载文件,之后用javascript解密它们。

例如,请参阅此链接以下载png文件:

https://mega.co.nz/#!7JRgFJzJ!efpJGWuPhYczLexY19ex82nuwfs4sR_DG4JXddeClH4

在此链接中,它将在浏览器中开始下载。我检查了检查元素中的网络选项卡,它将在完成文件的所有部分之后用AJAX下载部分文件,将所有文件自动保存在计算机上的一个文件中!

我想知道他们做了什么?你可以解释或链接到某些关于浏览器内部下载文件的资源吗?

也可以只使用javascript或者应该使用一些flash插件或类似的东西吗?

4 个答案:

答案 0 :(得分:93)

Mega使用几种不同的方法来做到这一点:(截至2013年11月27日)

  1. Filesystem API(Chrome / Firefox Extension polyfill)
  2. Adob​​e Flash SWF Filewriter(旧浏览器后备)
  3. BlobBuilder(IE10 / IE11)
  4. MEGA Firefox扩展程序(已弃用)
  5. Arraybuffer / Blob(在内存中)+ a[download](适用于支持[下载]的浏览器)
  6. MediaSource(实验性流媒体解决方案)
  7. 存储在IndexedDB存储中的Blob + a[download](Firefox 20+,对内存Blob方法的改进)
  8. (来源:https://eu.static.mega.co.nz/js/download_6.js

答案 1 :(得分:3)

MEGAcmd

官方命令行界面megacmd。您也可以在https://github.com/meganz/MEGAcmd

的github上从源代码构建它

megacmd是Mega SDK的包装器,如果您决定自己编译它,您将需要与下面列出的Mega SDK相同的依赖项(在ubuntu上)。

有关使用的详细信息,请参阅MEGAcmd User Guide

Mega SDK

Mega SDK,可以按照github页面上的步骤进行编译。它包括megacli实用程序,它是用于同步和下载/上载的交互式shell。

## 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

答案 2 :(得分:3)

使用Blob和URL API实现多部分浏览器下载程序的基本实现here。它在4个并发请求上下载文件并显示进度。请注意,设置range标题似乎对XHR请求通常不是一个好主意,请查看this topic

下载时:

While downloading

下载后:

After the download

另一个有趣的话题是Mega实现Pause / Resume功能。当前浏览器的XHR API不提供这种功能,所以你唯一的机会就是下载和放弃你小块的下载部分的多个小尺寸块,就像Mega一样。但是fetch流式传输功能可用于此目的,我还没有很好地探索它,但记录在案here

不过,看看这些令人敬畏的项目:

答案 3 :(得分:0)

从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浏览器中都可以正常使用,并且已经在生产环境中使用。