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

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

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

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

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

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

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

Ответ 1

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

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

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

Ответ 2

MEGAcmd

Существует megacmd, официальный интерфейс командной строки. Вы также можете собрать его из источников на github по адресу https://github.com/meganz/MEGAcmd.

megacmd - это оболочка для Mega SDK, и если вы решите скомпилировать ее самостоятельно, вам понадобятся те же зависимости (для ubuntu), которые перечислены ниже для Mega SDK.

Подробнее об использовании см. Руководство пользователя MEGAcmd.

Мега SDK

Mega SDK, который можно скомпилировать, следуя инструкциям на странице github. Он включает в megacli утилиту 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

модуль Python mega.py (устарел)

Для тех, кто нашел этот вопрос, ища реальный рецепт для загрузки ссылки в текстовом режиме, вот простой скрипт на 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 ссылки mega.nz.

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

megatools

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

На Ubuntu/Debian:

apt install megatools

На MacOS:

brew install megatools

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

Ответ 3

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

При загрузке:

При загрузке

После загрузки:

После загрузки

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

Btw, посмотрите на эти потрясающие проекты: