web-dev-qa-db-ja.com

mega.co.nzなどのファイルをダウンロードする

今日、mega.co.nzをチェックし、いくつかの機能に興奮しています。たとえば、ダウンロードページでブラウザにファイルをダウンロードし、その後JavaScriptでファイルを復号化します。

たとえば、PNGファイルをダウンロードするには、次のリンクを参照してください。

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

このリンクでは、ブラウザ内でダウンロードが開始されます。 inspect要素のネットワークタブをチェックしました。AJAXでファイルの一部をダウンロードします。その後、ファイルのすべての部分を完了し、コンピューター上の1つのファイルにすべてを保存します。

彼らが何をしているのか知りたいですか?そのようなブラウザ内のダウンロードファイルについて、いくつかのリソースを説明したり、リンクしたりできますか?

また、javascriptでのみそれを行うことができますか、いくつかのフラッシュプラグインなどを使用する必要がありますか?

83
Amir Molaa

Megaはこれを行うためにいくつかの異なる方法を使用します:(2013年11月27日現在)

  1. ファイルシステムAPI (Chrome/Firefox Extension polyfill)
  2. Adobe Flash SWF Filewriter(古いブラウザーのフォールバック)
  3. BlobBuilder (IE10/IE11)
  4. MEGA Firefox拡張機能(非推奨)
  5. Arraybuffer/Blob(メモリ内)+ a [download] (a [download]をサポートするブラウザの場合)
  6. MediaSource (実験的ストリーミングソリューション)
  7. IndexedDBストレージに保存されているBlob + a [download] (Firefox 20以降、インメモリBlobメソッドを改善)

(ソース: https://eu.static.mega.co.nz/js/download_6.js

95
roberto

BlobおよびURL APIを使用したマルチパートブラウザ内ダウンローダーの基本的な実装が、 here になりました。 4つの同時要求でファイルをダウンロードし、進行状況も表示します。 rangeヘッダーを設定することは、XHRリクエストでは一般的に良いアイデアではないようです。 このトピック をご覧ください。

ダウンロード中:

While downloading

ダウンロード後:

After the download

もう1つの興味深いトピックは、Megaの一時停止/再開機能の実装です。現在のブラウザのXHR APIはその機能を提供していないので、複数の小さなサイズのチャンクをダウンロードして、小さなチャンクのダウンロードされた部分をあきらめることが唯一のチャンスです。しかし、fetchストリーミング機能はその目的に使用できますが、まだ十分に検討していませんでしたが、文書化されています here

ところで、これらの素晴らしいプロジェクトを見てください:

4
Ebrahim Byagowi

MEGAcmd

megacmd 、公式のコマンドラインインターフェイスがあります。 https://github.com/meganz/MEGAcmd のgithubのソースからビルドすることもできます

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 module(deprecated)

テキストモードでリンクをダウンロードする実際のレシピを検索するこの質問を見つけた人のために、単純なpython mega.py モジュールを使用するスクリプト) Sudo pip install mega.py):

import sys
import getpass
#install the module with: 'Sudo pip install mega.py'
from mega import Mega

email = '[email protected]'
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
ccpizza