Laden Sie Dateien wie mega.co.nz herunter

88

Heute habe ich mega.co.nz überprüft und bin gespannt auf einige Funktionen. Auf der Download-Seite werden beispielsweise Dateien im Browser heruntergeladen und anschließend mit Javascript entschlüsselt.

Unter diesem Link können Sie beispielsweise eine PNG-Datei herunterladen:

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

Über diesen Link wird der Download im Browser gestartet. Ich habe die Registerkarte Netzwerk im Inspect-Element überprüft. Es werden Teile der Datei mit AJAX heruntergeladen, nachdem alle Teile der Datei abgeschlossen wurden. Alle werden automatisch in einer Datei auf dem Computer gespeichert.

Ich möchte wissen, was sie tun? Können Sie eine Ressource zum Herunterladen von Dateien in einem solchen Browser erklären oder auf diese verlinken?

kann es auch nur mit javascript machen oder sollte man einige flash plugins oder ähnliches verwenden?

Amir Molaa
quelle
3
Ja, und wenn Sie eine große Datei herunterladen, verlangsamt sich das System aufgrund des ständigen Paging
kinokijuf

Antworten:

102

Mega verwendet dazu verschiedene Methoden: (Stand: 27. November 2013)

  1. Dateisystem-API (Chrome / Firefox Extension Polyfill)
  2. Adobe Flash SWF Filewriter (Fallback alter Browser)
  3. BlobBuilder (IE10 / IE11)
  4. MEGA Firefox-Erweiterung (veraltet)
  5. Arraybuffer / Blob (im Speicher) + a [Download] (für Browser, die einen [Download] unterstützen)
  6. MediaSource (experimentelle Streaming-Lösung)
  7. Im IndexedDB-Speicher gespeicherter Blob + a [Download] (Firefox 20+, Verbesserung gegenüber der In-Memory-Blob-Methode)

(Quelle: https://eu.static.mega.co.nz/js/download_6.js )

Roberto
quelle
aber ich denke, es funktioniert auch auf Firefox. Ich habe hier ein Beispiel gefunden: jsfiddle.net/kGLnP/5 . Dieses Beispiel funktioniert auf Chrome und Firefox korrekt. aber was machen sie für andere Browser wie Safari oder Oper? Ich kann auch mega.co.nz Links mit diesen Browsern herunterladen ..
Amir Molaa
1
Ja, das von Ihnen bereitgestellte Beispiel ( jsfiddle.net/kGLnP/5 ) sollte für Firefox funktionieren, aber nur die neuesten (Version 20 oder höher, siehe developer.mozilla.org/en-US/docs/HTML/Element/a für Weitere Informationen zu Unterstützungen). Ich habe gerade Megas JavaScript-Code gelesen und meine Antwort aktualisiert. (Es wird Ihre Frage zu anderen Browsern beantworten. Grundsätzlich werden sie auf Flash zurückgreifen, wenn sie keine Nur-JS-Lösungen verwenden können.)
Roberto
Wow, ich habe diese Seite gestern gesehen und wollte die gleiche Frage stellen. Als ich versuchte, einen Game-Mod herunterzuladen, war ich überrascht, dass der Download sofort im Browser gestartet wurde und meine volle Geschwindigkeit zeigte !!! Ich habe FF 20.0.1 verwendet.
Wel
Ist Robertos Antwort noch aktuell? Ich habe versucht, eine große Datei von mega.co.nz in Firefox herunterzuladen und Flash zu deaktivieren, und es hat immer noch funktioniert. Beim Versuch, eine große Datei herunterzuladen, bittet Firefox um die Genehmigung, mehr als 50 MB zu speichern, was mich glauben lässt, dass sie indexedDB verwenden.
Shacharz
1
Nein, es ist nicht (wirklich) aktuell, das aktuelle Download-Skript finden Sie hier: eu.static.mega.co.nz/download_46.js . Ich habe einen kurzen Blick darauf geworfen und es sind immer noch mehr oder weniger die gleichen Tricks mit einigen neuen Ergänzungen, einschließlich Leistungsverbesserungen durch Caching (mit IndexedDB, wie Sie vermutet haben). Ich werde meine Antwort aktualisieren, wenn ich Zeit habe, den Code zu lesen.
Roberto
4

Eine grundlegende Implementierung des mehrteiligen Downloaders im Browser mithilfe von Blob- und URL-APIs wird hier vorgestellt . Es lädt eine Datei bei 4 gleichzeitigen Anforderungen herunter und zeigt auch den Fortschritt an. Bitte beachten Sie, dass das Festlegen des rangeHeaders bei XHR-Anforderungen im Allgemeinen keine gute Idee ist. Schauen Sie sich dieses Thema an .

Beim Herunterladen:

Beim Herunterladen

Nach dem Download:

Nach dem Download

Ein weiteres interessantes Thema wäre die Implementierung der Pause / Resume-Funktionalität von Mega. Die XHR-API aktueller Browser bietet diese Funktion nicht. Die einzige Möglichkeit besteht darin, mehrere kleine Chunks herunterzuladen und den heruntergeladenen Teil Ihrer kleinen Chunks aufzugeben, wie es anscheinend auch bei Mega der Fall ist. Aber die fetchStreaming-Funktion kann für diesen Zweck verwendet werden. Ich habe das noch nicht gut genug untersucht, aber es ist hier dokumentiert .

Übrigens, schauen Sie sich diese großartigen Projekte an:

Ebrahim Byagowi
quelle
3

MEGAcmd

Es gibt Megacmd , die offizielle Befehlszeilenschnittstelle. Sie können es auch aus Quellen auf Github unter https://github.com/meganz/MEGAcmd erstellen

megacmd ist ein Wrapper um Mega SDK. Wenn Sie es selbst kompilieren möchten, benötigen Sie dieselben Abhängigkeiten (auf Ubuntu) wie die unten aufgeführten für Mega SDK.

Einzelheiten zur Verwendung finden Sie im MEGAcmd-Benutzerhandbuch .

Mega SDK

Mega SDK, das durch Befolgen der Schritte auf der Github- Seite kompiliert werden kann . Es enthält das megacliDienstprogramm, eine interaktive Shell zum Synchronisieren und Herunterladen / Hochladen.

## 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-Modul (veraltet)

Für diejenigen, die diese Frage auf der Suche nach einem tatsächlichen Rezept zum Herunterladen eines Links im Textmodus gefunden haben, gibt es hier ein einfaches Python-Skript, das das Modul mega.py verwendet (installieren mit 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])

Das Skript arbeitet mit Python 2.7 und verwendet die URL des Links mega.nz.

getpass wird verwendet, um das Kennwort sicher in die Konsole einzugeben, um zu vermeiden, dass das Kennwort im Skript gespeichert wird. Wenn Sie das Kennwort bequem fest codieren möchten, setzen Sie es in Zeile 7.

megatools

Auf den meisten Linux / Posix-Boxen können Sie Megatools aus Standard-Repositorys installieren , d. H.

Auf Ubuntu / Debian:

apt install megatools

Unter MacOS:

brew install megatools

Nach der Installation finden Sie eine Reihe von Befehlszeilenprogrammen, unter denen Sie megadlsowohl freigegebene Dateien als auch Ihre eigenen Dateien herunterladen können. Siehe megadl -hfür Details.

ccpizza
quelle