Solución:
Mega utiliza varios métodos diferentes para hacer esto: (a partir del 27 de noviembre de 2013)
- API del sistema de archivos (polyfill de extensión de Chrome / Firefox)
- Adobe Flash SWF Filewriter (alternativa de exploradores antiguos)
- BlobBuilder (IE10 / IE11)
- Extensión MEGA Firefox (obsoleta)
- Arraybuffer / Blob (en memoria) + a[download] (para navegadores que admiten[download])
- MediaSource (solución de transmisión experimental)
- Blob almacenado en el almacenamiento IndexedDB + a[download] (Firefox 20+, mejora con respecto al método Blob en memoria)
(fuente: https://eu.static.mega.co.nz/js/download_6.js)
Aquí se presenta una implementación básica del descargador multiparte en el navegador que utiliza Blob y API de URL. Descarga un archivo en 4 solicitudes simultáneas y también muestra el progreso. Tenga en cuenta que parece estar range
El encabezado generalmente no es una buena idea para las solicitudes XHR, eche un vistazo a este tema.
Durante la descarga:
Después de la descarga:
Otro tema interesante sería la implementación de la funcionalidad Pause / Resume de Mega. La API XHR de los navegadores actuales no ofrece esa capacidad, por lo que la única posibilidad que tiene es descargar varios fragmentos pequeños y renunciar a la parte descargada de sus fragmentos pequeños, como parece que también se hace en Mega. Pero fetch
La función de transmisión se puede usar para ese propósito, todavía no lo exploré lo suficientemente bien, pero está documentado aquí.
Por cierto, eche un vistazo a estos increíbles proyectos:
- https://github.com/eligrey/FileSaver.js
- https://github.com/jimmywarting/StreamSaver.js
MEGAcmd
Existe megacmd, la interfaz de línea de comandos oficial. También puede compilarlo a partir de fuentes en github en https://github.com/meganz/MEGAcmd
megacmd
es un envoltorio de Mega SDK y si decide compilarlo por su cuenta, necesitará las mismas dependencias (en ubuntu) que las que se enumeran a continuación para Mega SDK.
Para obtener detalles sobre el uso, consulte la Guía del usuario de MEGAcmd.
Mega SDK
Mega SDK que se puede compilar siguiendo los pasos de la página de github. Incluye el megacli
utilidad que es un shell interactivo para sincronizar y descargar / cargar.
## 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
módulo python mega.py (obsoleto)
Para aquellos que encontraron esta pregunta buscando una receta real para descargar un enlace en modo texto, aquí hay un script de Python simple que usa el módulo mega.py (instálelo con 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])
El script funciona con python 2.7 y toma la URL del enlace mega.nz.
conseguir pase se utiliza para ingresar de forma segura la contraseña en la consola a fin de evitar almacenar la contraseña en el script; si se siente cómodo codificando la contraseña, configúrela en la línea # 7.
megatools
En la mayoría de las cajas Linux / posix, puede instalar megatools desde repositorios estándar, es decir
En ubuntu / debian:
apt install megatools
En MacOS:
brew install megatools
Una vez instalado, encontrará una serie de utilidades de línea de comando, entre las cuales megadl
que puede descargar tanto archivos compartidos como sus propios archivos. Ver megadl -h
para detalles.