2013-04-14 9 views
77

Dzisiaj sprawdziłem mega.co.nz i jestem podekscytowany niektórymi funkcjami. na przykład na stronie pobierania pobierze pliki w przeglądarce, a następnie odszyfruje je za pomocą javascript.Pobierz pliki, takie jak mega.co.nz

na przykład zobaczyć ten link, aby pobrać plik PNG:

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

w ten link będzie rozpocząć pobieranie w przeglądarce. Sprawdziłem zakładkę sieci w elemencie inspekcyjnym, aby pobrać części pliku z AJAX po zakończeniu wszystkich części pliku, zapisze je wszystkie automatycznie w jednym pliku na komputerze!

Chcę wiedzieć, co robią? czy możesz wyjaśnić lub połączyć się z jakimś zasobem dotyczącym pobierania plików w takiej przeglądarce?

również można zrobić to tylko z javascript lub powinien używać niektórych wtyczek flash lub coś podobnego?

+2

Tak, a jeśli pobrać duży plik system spowalnia do indeksowania z powodu stałej paging – kinokijuf

Odpowiedz

86

Mega wykorzystuje kilka różnych sposobów, aby to zrobić: (od 27 listopada 2013)

  1. Filesystem API (Chrome/Firefox Extension polyfill)
  2. Adobe Flash SWF FileWriter (starych przeglądarek zastępczą)
  3. BlobBuilder (IE10/IE11)
  4. MEGA Firefoksa rozszerzeń (wycofane)
  5. Arraybuffer/blob (pamięci) + a[download] (dla przeglądarki, które obsługują [downloa d])
  6. MediaSource (doświadczalnie roztwór strumieniowe)
  7. blob przechowywane w IndexedDB składowania + a[download] (Firefox 20+, poprawy względem sposobu blob w pamięci)

(źródło: https://eu.static.mega.co.nz/js/download_6.js)

+0

, ale myślę, że to działa również na firefox. znalazłem próbkę tutaj http://jsfiddle.net/kGLnP/5/. ten przykład działa poprawnie na chrome i Firefoxie. ale co robią w innych przeglądarkach, takich jak safari czy opera? mogę też pobierać łącza mega.co.nz z tymi przeglądarkami .. –

+1

Tak, podany przykład (http://jsfiddle.net/kGLnP/5/) powinien działać w przeglądarce Firefox, ale tylko najnowsze (wersja 20 lub później, zobacz https://developer.mozilla.org/en-US/docs/HTML/Element/a, aby uzyskać więcej informacji na temat obsługi). Właśnie przeczytałem kod JavaScript Mega i zaktualizowałem moją odpowiedź. (Będzie to odpowiedź na twoje pytanie dotyczące innych przeglądarek.) Zasadniczo będą używać Flasha, gdy nie mogą używać rozwiązań JS-only.) – roberto

+0

wielkie dzięki :) –

1

Dla tych, którzy znaleźli to pytanie, szukając rzeczywistego przepisu do pobrania łącza w trybie tekstowym, jest prosty skrypt pythonowy, który używa modułu mega.py (zainstaluj go pod 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]) 

getpass służy do bezpiecznego wprowadzania hasła w konsoli w celu uniknięcia przechowywania hasła w skrypcie - jeśli są wygodne hardcoding hasło a następnie ustawić go w linii 7 #.

Skrypt działa z pythonem 2.7 i pobiera adres URL linku mega.nz.

0

Podstawową implementacją wieloczęściowego modułu pobierającego w przeglądarce z wykorzystaniem interfejsów API Blob i URL jest here. Pobiera plik na 4 równoczesne żądania i pokazuje również postęp. Pamiętaj, że ustawienie nagłówka range może nie być dobrym pomysłem na żądania XHR, spójrz na this topic.

Podczas pobierania:

While downloading

Po pobraniu:

After the download

Innym interesującym tematem będzie wdrożenie funkcjonalności Pause/Resume z Mega. Interfejs API XHR obecnych przeglądarek nie oferuje takiej możliwości, więc jedyną szansą na to jest pobieranie wielu małych kawałków i rezygnacja z pobranej części małych kawałków, tak jak wydaje się to również w przypadku Mega. Jednak do tego celu można użyć funkcji przesyłania strumieniowego fetch. Nie zbadałem tego wystarczająco dobrze, ale jest to udokumentowane here.

Btw, spojrzeć na te niesamowite projekty:

Powiązane problemy