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


89

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

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

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

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

彼らが何をしているのか知りたいですか?そのようなブラウザ内のダウンロードファイルに関する説明やリソースへのリンクを教えてください。

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


3
ええ、大きなファイルをダウンロードすると、ページングが
頻繁に発生

回答:


102

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

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

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


でもFirefoxでも動作すると思います。ここでサンプルを見つけましたjsfiddle.net/kGLnP/5。このサンプルは、chromeとfirefoxで正しく機能します。しかし、彼らはサファリやオペラのような他のブラウザのために何をしますか?私は...あまりにも、これらのブラウザでmega.co.nzリンクをダウンロードすることができます
アミールMolaa

1
はい、提供したサンプル(jsfiddle.net/kGLnP/5)はFirefoxで機能するはずですが、最新のもの(バージョン20以降、developer.mozilla.org / en-US / docs / HTML / Element / aを参照)のみです。サポートに関する詳細情報)。MegaのJavaScriptコードを読んで、答えを更新しました。(他のブラウザに関する質問に答えます。基本的に、JSのみのソリューションを使用できない場合は、フラッシュを使用します。)
roberto 2013

昨日このサイトを見たばかりで、同じ質問をするつもりでした。Game modをダウンロードしようとすると、ブラウザ内でダウンロードがすぐに開始され、フルスピードレートが表示されることに驚きました。私はFF20.0.1を使用していました。
ウェル2013

ロベルトの答えはまだ最新ですか?Firefoxのmega.co.nzから大きなファイルをダウンロードしてフラッシュを無効にしようとしましたが、それでも機能しました。大きなファイルをダウンロードしようとすると、Firefoxは50MBを超えるファイルを保存するための承認を求めているため、indexedDBを使用していると思います。
shacharz 2013

1
いいえ、(実際には)最新ではありません。現在のダウンロードスクリプトはここにあります:eu.static.mega.co.nz/download_46.js。簡単に調べてみましたが、キャッシュによるパフォーマンスの向上(ご想像のとおり、IndexedDBを使用)など、いくつかの新しい追加を加えても、ほぼ同じトリックです。コードを読む時間ができたら、回答を更新します。
roberto 2013

4

BlobおよびURLAPIを使用したマルチパートブラウザー内ダウンローダーの基本的な実装をここに示します。4つの同時リクエストでファイルをダウンロードし、進行状況も表示します。rangeXHRリクエストでは、ヘッダーの設定は一般的に適切ではないように思われることに注意してください。このトピックをご覧ください。

ダウンロード中:

ダウンロード中

ダウンロード後:

ダウンロード後

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

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


3

MEGAcmd

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

megacmd はMegaSDKのラッパーであり、独自にコンパイルする場合は、Mega SDKについて以下にリストされているものと同じ依存関係(ubuntu上)が必要になります。

使用法の詳細については、MEGAcmdユーザーガイドを参照してください。

メガSDK

githubページの手順に従ってコンパイルできるMegaSDK。これには、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])

このスクリプトはPython2.7で動作し、mega.nzリンクのURLを取得します。

getpassは、スクリプトにパスワードが保存されないようにするために、コンソールにパスワードを安全に入力するために使用されます。パスワードをハードコーディングすることに慣れている場合は、7行目にパスワードを設定してください。

megatools

ほとんどのLinux / posixボックスでは、標準のリポジトリからメガツールをインストールできます。

ubuntu / debianの場合:

apt install megatools

MacOSの場合:

brew install megatools

インストールするとmegadl、共有ファイルと独自のファイルの両方をダウンロードできるコマンドラインユーティリティがいくつか見つかります。詳細はmegadl -hをご覧ください。


0

2020年以降、Service Workerを使用して、カスタムコードをブラウザの組み込みのダウンロードマネージャーとシームレスに統合できます:https//developers.google.com/web/updates/2016/06/sw-読み取り可能ストリーム

また、ファイルを表示する代わりにダウンロードするには、次のヘッダーがあると思います。

 headers: {
   'Content-Type': 'application/octet-stream',
   'Content-Disposition': 'attachment; filename="your_filename.bin"',
 }

個人的には、このアプローチはFirefoxのGoogle Chromeの両方で問題なく機能していることがわかり、すでに本番環境で使用しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.