Сегодня я проверил mega.co.nz и мне очень понравились некоторые возможности. Например, на странице загрузки он будет загружать файлы в браузер, а затем расшифровывать их с помощью javascript.
например, см. эту ссылку, чтобы загрузить файл png:
https://mega.co.nz/#!7JRgFJzJ!efpJGWuPhYczLexY19ex82nuwfs4sR_DG4JXddeClH4
по этой ссылке начнется загрузка в браузере. Я проверил вкладку сети в элементе проверки, он загрузит части файла с помощью AJAX после того, как завершит все части файла, автоматически сохранит их все в одном файле на компьютере!
я хочу знать, что они делают? Можете ли вы объяснить или дать ссылку на какой-либо ресурс о загрузке файлов в браузере?
также можно сделать это только с помощью javascript или следует использовать плагины для Flash или что-то в этом роде?
источник
Ответы:
Для этого Mega использует несколько различных методов: (по состоянию на 27 ноября 2013 г.)
(источник: https://eu.static.mega.co.nz/js/download_6.js )
источник
Базовая реализация многоголосного в браузере загрузчик с помощью Blob и URL API , приводится здесь . Он загружает файл по 4 одновременным запросам и также показывает прогресс. Обратите внимание: кажется, что настройка
range
заголовка обычно не является хорошей идеей для запросов XHR, ознакомьтесь с этой темой .При скачивании:
После загрузки:
Еще одна интересная тема - реализация функции паузы / возобновления от Mega. XHR API текущих браузеров не предлагает такую возможность, поэтому единственный шанс, который у вас есть, - это загрузить несколько небольших фрагментов и отказаться от загруженной части ваших небольших фрагментов, как это, кажется, делается и на Mega. Но
fetch
для этой цели можно использовать функцию потоковой передачи, я еще не изучил ее достаточно хорошо, но она задокументирована здесь .Кстати, взгляните на эти классные проекты:
источник
MEGAcmd
Существует мегакмд , официальный интерфейс командной строки. Вы также можете собрать его из источников на github по адресу https://github.com/meganz/MEGAcmd.
megacmd
- это оболочка для Mega SDK, и если вы решите скомпилировать ее самостоятельно, вам потребуются те же зависимости (в ubuntu), что и для Mega SDK, перечисленных ниже.Подробнее об использовании см. Руководство пользователя MEGAcmd .
Мега SDK
Mega SDK, который можно скомпилировать, следуя инструкциям на странице github . Он включает
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 = '_your_megamail_@domain.com' 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.
megatools
На большинстве ящиков Linux / posix вы можете установить мегапрограммы из стандартных репозиториев, т.е.
В ubuntu / debian:
В MacOS:
После установки вы найдете ряд утилит командной строки, среди
megadl
которых можно загружать как общие, так и ваши собственные файлы. Подробнееmegadl -h
см.источник
С 2020 года вы можете использовать Service Workers для беспрепятственной интеграции вашего пользовательского кода со встроенным диспетчером загрузок браузера: https://developers.google.com/web/updates/2016/06/sw-readablestreams
Я также предполагаю, что у вас должны быть следующие заголовки для загрузки файла, а не просмотра:
headers: { 'Content-Type': 'application/octet-stream', 'Content-Disposition': 'attachment; filename="your_filename.bin"', }
Лично я считаю, что этот подход безупречно работает как в Google Chrome, так и в Firefox, и я уже использую его в производственной среде.
источник