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.
na przykład zobacz ten link, aby pobrać plik png:
https://mega.co.nz/#!7JRgFJzJ!efpJGWuPhYczLexY19ex82nuwfs4sR_DG4JXddeClH4
w tym linku rozpocznie pobieranie w przeglądarce. Sprawdziłem zakładkę sieciową w elemencie inspect, to pobierze części pliku z AJAXem, po tym jak skompletuje wszystkie części pliku, zapisze je wszystkie w jednym pliku na komputerze automatycznie!
chcę wiedzieć, co robią? czy możesz wyjaśnić lub zamieścić link do jakiegoś źródła na temat pobierania plików w przeglądarce w taki sposób?
też można to zrobić tylko za pomocą javascript, czy też powinno się użyć jakichś wtyczek flash lub czegoś w tym rodzaju?
źródło
Odpowiedzi:
Mega używa do tego kilku różnych metod: (stan na 27 listopada 2013 r.)
(źródło: https://eu.static.mega.co.nz/js/download_6.js )
źródło
Podstawowa implementacja multipart w przeglądarce downloader użyciu blob i URL API doprowadza się tutaj . Pobiera plik w 4 jednoczesnych żądaniach i pokazuje również postęp. Należy pamiętać, że wydaje się, że ustawienie
range
nagłówka może generalnie nie być dobrym pomysłem w przypadku żądań XHR, spójrz na ten temat .Podczas pobierania:
Po pobraniu:
Innym interesującym tematem byłoby wdrożenie funkcji Pause / Resume z Mega. XHR API obecnych przeglądarek nie oferuje takiej możliwości, więc jedyną szansą, jaką masz, jest pobranie wielu małych fragmentów i rezygnacja z pobranej części małych fragmentów, tak jak się wydaje, jest to również robione na Mega. Ale
fetch
do tego celu można użyć funkcji przesyłania strumieniowego, nie zbadałem tego wystarczająco dobrze, ale jest to udokumentowane tutaj .Przy okazji, spójrz na te niesamowite projekty:
źródło
MEGAcmd
Jest megacmd , oficjalny interfejs wiersza poleceń. Możesz również zbudować go ze źródeł na github pod adresem https://github.com/meganz/MEGAcmd
megacmd
jest opakowaniem dla Mega SDK i jeśli zdecydujesz się skompilować go samodzielnie, będziesz potrzebować tych samych zależności (na ubuntu), jak te wymienione poniżej dla Mega SDK.Szczegółowe informacje na temat użytkowania można znaleźć w podręczniku użytkownika MEGAcmd .
Mega SDK
Mega SDK, który można skompilować, wykonując czynności opisane na stronie github . Zawiera
megacli
narzędzie, które jest interaktywną powłoką do synchronizacji i pobierania / wysyłania.## 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 moduł pythona (przestarzały)
Dla tych, którzy znaleźli to pytanie, szukając rzeczywistego przepisu na pobranie linku w trybie tekstowym, oto prosty skrypt w Pythonie, który używa modułu mega.py (zainstaluj go z
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])
Skrypt działa z Pythonem 2.7 i pobiera adres URL linku mega.nz.
megatools
Na większości skrzynek Linux / Posix możesz zainstalować megatools ze standardowych repozytoriów, tj
W systemie ubuntu / debian:
W systemie MacOS:
Po zainstalowaniu znajdziesz szereg narzędzi wiersza poleceń, wśród
megadl
których możesz pobierać zarówno pliki udostępnione, jak i własne. Zobaczmegadl -h
szczegóły.źródło
Od 2020 r. Możesz używać Service Workers do bezproblemowej integracji własnego kodu z wbudowanym menedżerem pobierania przeglądarki: https://developers.google.com/web/updates/2016/06/sw-readablestreams
Wydaje mi się również, że miałbyś następujące nagłówki, aby plik został pobrany, a nie przeglądany:
headers: { 'Content-Type': 'application/octet-stream', 'Content-Disposition': 'attachment; filename="your_filename.bin"', }
Osobiście stwierdziłem, że to podejście działa bezbłędnie zarówno w Google Chrome w Firefoksie, jak i już używam go w produkcji.
źródło