web-dev-qa-db-fra.com

Téléchargez des fichiers comme mega.co.nz

Aujourd'hui, j'ai vérifié sur mega.co.nz et je suis enthousiasmé par certaines fonctionnalités. par exemple, dans la page de téléchargement, les fichiers sont téléchargés sur le navigateur et ensuite décryptés avec javascript.

par exemple voir ce lien pour télécharger un fichier png:

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

dans ce lien, il commencera le téléchargement dans le navigateur. J'ai vérifié l'onglet réseau dans l'élément inspecter, il téléchargera des parties du fichier avec AJAX après avoir terminé toutes les parties du fichier, les sauvegardera automatiquement dans un fichier sur l'ordinateur!

je veux savoir ce qu'ils font? pouvez-vous expliquer ou créer un lien vers une ressource sur le téléchargement de fichiers dans le navigateur de cette manière?

également peut-il le faire uniquement avec JavaScript ou devrait utiliser des plugins flash ou quelque chose comme ça?

83
Amir Molaa

Mega utilise différentes méthodes pour ce faire: (au 27 nov. 2013)

  1. API du système de fichiers (Polyfill Extension Chrome/Firefox)
  2. Adobe Flash SWF Filewriter (repli des anciens navigateurs)
  3. BlobBuilder (IE10/IE11)
  4. MEGA Firefox Extension (obsolète)
  5. Arraybuffer/Blob (en mémoire) + a [download] (pour les navigateurs prenant en charge un [download])
  6. MediaSource (solution de streaming expérimental)
  7. Blob stocké dans la mémoire IndexedDB + a [download] (Firefox 20+, amélioration de la méthode Blob en mémoire)

(source: https://eu.static.mega.co.nz/js/download_6.js )

95
roberto

Une implémentation de base du téléchargeur multi-parties dans le navigateur utilisant les API Blob et URL est présentée ici . Il télécharge un fichier sur 4 demandes simultanées et montre également la progression. Veuillez noter qu'il semble que définir range header ne soit généralement pas une bonne idée pour les requêtes XHR, jetez un œil à ce sujet .

Pendant le téléchargement:

While downloading

Après le téléchargement:

After the download

Un autre sujet intéressant serait l’implémentation de la fonctionnalité Pause/Reprendre de Mega. L’API XHR des navigateurs actuels n’offre pas cette possibilité. La seule chance qui vous reste est de télécharger plusieurs morceaux de petite taille et d’abandonner la partie téléchargée de vos petits morceaux, comme cela semble être le cas sur Mega également. Mais la fonctionnalité de streaming fetch peut être utilisée à cette fin, je ne l'ai pas encore suffisamment explorée, mais elle est documentée ici .

Btw, jetez un oeil à ces projets impressionnants:

4
Ebrahim Byagowi

MEGAcmd

Il y a megacmd , l'interface officielle en ligne de commande. Vous pouvez également le construire à partir de sources sur github à l’adresse suivante: https://github.com/meganz/MEGAcmd

megacmd est un wrapper autour de Mega SDK et si vous décidez de le compiler vous-même, vous aurez besoin des mêmes dépendances (sous Ubuntu) que celles énumérées ci-dessous pour Mega SDK.

Pour plus de détails sur l'utilisation, voir Guide de l'utilisateur MEGAcmd .

Mega SDK

Mega SDK qui peut être compilé en suivant les étapes de la page github . Il inclut l'utilitaire megacli, qui est un shell interactif pour la synchronisation et le téléchargement.

## 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

mega.py python module (obsolète)

Pour ceux qui ont trouvé cette question cherchant une recette réelle pour télécharger un lien en mode texte, voici un simple python script qui utilise le module mega.py (l'installer avec 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])

Le script fonctionne avec python 2.7 et prend l'URL du lien mega.nz.

getpass est utilisé pour la saisie sécurisée du mot de passe dans la console afin d'éviter de le stocker dans le script - si vous êtes prêt à coder le mot de passe, puis placez-le à la ligne 7.

megatools

Sur la plupart des boîtes Linux/Posix, vous pouvez installer megatools à partir de référentiels standard, c.-à-d.

Sur Ubuntu/Debian:

apt install megatools

Sur MacOS:

brew install megatools

Une fois installé, vous trouverez un certain nombre d’utilitaires de ligne de commande, parmi lesquels megadl qui peut télécharger des fichiers partagés et vos propres fichiers. Voir megadl -h pour plus de détails.

3
ccpizza