Скачивайте файлы, такие как 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, посмотрите на эти потрясающие проекты: