Скачать файлы, такие как mega.co.nz

сегодня я проверил mega.co.nz и я в восторге от некоторых функций. например, на странице загрузки он будет загружать файлы в браузере и после этого расшифровывать их с помощью javascript.

например, см. Эту ссылку для загрузки файла png:

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

в этой ссылке, он начнет загрузку в браузере. я проверил вкладку сети в элементе inspect, который он загрузит части файла с AJAX после этого завершат все части файла, сохранят их все в одном файле на компьютере автоматически!

Я хочу знать, что они делают? можете ли вы объяснить или ссылку на какой-то ресурс о загрузке файлов внутри браузера?

также можно сделать это только с javascript или использовать некоторые плагины flash или что-то в этом роде?

3 ответов


Mega использует для этого несколько разных методов: (по состоянию на 27 ноября 2013 года)

  1. API файловой системы (Chrome / Firefox расширение polyfill)
  2. Adobe Flash SWF Filewriter (старые резервные браузеры)
  3. BlobBuilder (В IE10/IE11 С)
  4. расширение MEGA Firefox (устарело)
  5. Arraybuffer / Blob (в памяти)+ a[скачать] (для браузеров, которые поддерживают а[скачать])
  6. MediaSource (экспериментальное потоковое решение)
  7. Blob, хранящийся в хранилище IndexedDB + a[скачать] (Firefox 20+, улучшение по сравнению с методом Blob в памяти)

(источник: https://eu.static.mega.co.nz/js/download_6.js)


базовая реализация multipart in-browser downloader с использованием Blob и URL API принесена здесь. Он загружает файл на 4 одновременных запросов и показывает прогресс. Обратите внимание, что это похоже на setting range заголовок, как правило, не является хорошей идеей для запросов XHR, посмотрите на этой теме.

во время загрузки:

While downloading

после скачать:

After the download

другой интересной темой будет реализация функции паузы / возобновления от Mega. XHR API текущих браузеров не предлагает эту возможность, поэтому единственный шанс, который у вас есть, - это сделать несколько небольших по размеру кусков загрузки и отказаться от загруженной части ваших небольших кусков, как это кажется, также делается на Mega. Но!--1--> потоковая функция может быть использована для этой цели, я еще не изучил это достаточно хорошо, но это документально здесь.

кстати, взгляните на эти удивительные проекты:


для тех, кто нашел этот вопрос, поиск фактического рецепта для загрузки ссылки в текстовом режиме вот простой скрипт 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 и принимает URL мега.NZ link.

getpass используется для безопасного ввода пароля в консоль во избежание сохранения пароля в скрипт-если вам удобно hardcoding пароль, то установите его в строке #7.

megatools

на большинстве ящиков Linux / posix вы можете установить megatools из стандартных репозиториев, т. е.

на ubuntu / debian:

apt install megatools

На MacOS:

brew install megatools

после установки вы найдете ряд утилит командной строки, среди которых megadl где можно скачать общие файлы и ваш собственный файл. См.megadl -h для сведения.