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


89

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

например, см. эту ссылку, чтобы загрузить файл png:

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

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

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

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


3
Да, и если вы загружаете большой файл, система замедляется до сканирования из-за постоянной подкачки страниц
kinokijuf

Ответы:


102

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

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

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


но я думаю, что он работает и в Firefox. Я нашел здесь образец jsfiddle.net/kGLnP/5 . этот образец правильно работает в Chrome и Firefox. но что они делают для других браузеров, таких как сафари или опера? я также могу загружать ссылки mega.co.nz в этих браузерах ..
Амир Молаа,

1
Да, предоставленный вами образец ( jsfiddle.net/kGLnP/5 ) должен работать с Firefox, но только с последними версиями (версия 20 или более поздняя, ​​см. Developer.mozilla.org/en-US/docs/HTML/Element/a для подробнее о опорах). Я только что прочитал код JavaScript Mega и обновил свой ответ. (Он ответит на ваш вопрос о других браузерах. Обычно они прибегают к использованию флэш-памяти, когда не могут использовать решения только для JS.)
Роберто

Вау, я только вчера видел этот сайт и собирался задать тот же вопрос. Когда я попытался загрузить мод Game, я был удивлен, что загрузка сразу же началась в браузере, показывая мою полную скорость !!! Я использовал FF 20.0.1.
Wel

Ответ Роберто все еще актуален? Я пробовал загрузить большой файл с mega.co.nz в firefox и отключил flash, и он все еще работал. При попытке загрузить большой файл firefox запрашивает разрешение на хранение более 50 МБ, что заставляет меня думать, что они используют indexedDB.
Shacharz

1
Нет, он (действительно) не актуален , текущий сценарий загрузки находится здесь: eu.static.mega.co.nz/download_46.js . Я быстро посмотрел, и это все еще более или менее те же приемы с некоторыми новыми дополнениями, включая повышение производительности за счет кеширования (с использованием IndexedDB, как вы уже догадались). Я обновлю свой ответ, когда у меня будет время прочитать код.
Роберто

4

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

При скачивании:

При скачивании

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

После скачивания

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

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


3

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.

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

megatools

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

В ubuntu / debian:

apt install megatools

В MacOS:

brew install megatools

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


0

С 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, и я уже использую его в производственной среде.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.