Scarica file come mega.co.nz


89

Oggi ho controllato su mega.co.nz e sono entusiasta di alcune funzionalità. Ad esempio nella pagina di download scaricherà i file sul browser e successivamente li decritterà con javascript.

per esempio vedere questo link per scaricare un file png:

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

a questo link inizierà il download all'interno del browser. ho controllato la scheda di rete in inspect element, scaricherà parti del file con AJAX dopo aver completato tutte le parti del file, le salverà tutte in un file automaticamente sul computer!

voglio sapere cosa fanno? puoi spiegare o collegare a qualche risorsa sui file di download all'interno del browser in questo modo?

puoi farlo anche solo con javascript o dovresti usare alcuni plugin flash o qualcosa del genere?


3
Sì, e se scarichi un file di grandi dimensioni, il sistema rallenta a una scansione a causa del paging costante
kinokijuf

Risposte:


102

Mega utilizza diversi metodi per farlo: (al 27 novembre 2013)

  1. API del file system (Polyfill estensione Chrome / Firefox)
  2. Adobe Flash SWF Filewriter (fallback dei vecchi browser)
  3. BlobBuilder (IE10 / IE11)
  4. Estensione MEGA per Firefox (obsoleta)
  5. Arraybuffer / Blob (in memoria) + a [download] (per i browser che supportano un [download])
  6. MediaSource (soluzione di streaming sperimentale)
  7. Blob archiviato nell'archivio IndexedDB + a [download] (Firefox 20+, miglioramento rispetto al metodo Blob in memoria)

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


ma penso che funzioni anche su Firefox. ho trovato un esempio qui jsfiddle.net/kGLnP/5 . questo esempio funziona correttamente su Chrome e Firefox. ma cosa fanno per altri browser come safari o opera? posso scaricare link mega.co.nz anche con questi browser ..
Amir Molaa

1
Sì, l'esempio che hai fornito ( jsfiddle.net/kGLnP/5 ) dovrebbe funzionare per Firefox, ma solo quelli più recenti (versione 20 o successiva, vedi developer.mozilla.org/en-US/docs/HTML/Element/a per maggiori informazioni sui supporti). Ho appena letto il codice JavaScript di Mega e aggiornato la mia risposta. (Risponderà alla tua domanda su altri browser. Fondamentalmente, ricorreranno all'uso di flash quando non possono utilizzare soluzioni solo JS.)
roberto

Wow, ho appena visto questo sito ieri e stavo per fare la stessa domanda. Quando ho provato a scaricare una mod di gioco sono rimasto sorpreso che il download si avvii immediatamente all'interno del browser mostrando la mia velocità massima !!! Stavo usando FF 20.0.1.
Ben

La risposta di roberto è ancora aggiornata? Ho provato a scaricare un file di grandi dimensioni da mega.co.nz in Firefox e ho disabilitato il flash e ha ancora funzionato. Quando si tenta di scaricare un file di grandi dimensioni, Firefox chiede l'approvazione per archiviare più di 50 MB, il che mi fa pensare che utilizzino indexedDB.
shacharz

1
No, non è (veramente) aggiornato, lo script di download corrente è qui: eu.static.mega.co.nz/download_46.js . Ho dato una rapida occhiata e sono ancora più o meno gli stessi trucchi con alcune nuove aggiunte, inclusi miglioramenti delle prestazioni tramite il caching (usando IndexedDB, come hai intuito). Aggiornerò la mia risposta quando avrò il tempo di leggere il codice.
roberto

4

Un'implementazione di base di multipart nel browser downloader utilizzando Blob e le API URL viene portato qui . Scarica un file su 4 richieste simultanee e mostra anche lo stato di avanzamento. Tieni presente che sembra che l'impostazione rangedell'intestazione in genere non sia una buona idea sulle richieste XHR, dai un'occhiata a questo argomento .

Durante il download:

Durante il download

Dopo il download:

Dopo il download

Un altro argomento interessante potrebbe essere l'implementazione della funzionalità Pausa / Riprendi da Mega. L'API XHR dei browser attuali non offre questa funzionalità, quindi l'unica possibilità che hai è di scaricare più blocchi di piccole dimensioni e rinunciare alla parte scaricata dei tuoi piccoli pezzi, come sembra sia fatto anche su Mega. Ma la fetchfunzionalità di streaming può essere utilizzata a tale scopo, non l'ho ancora esplorata abbastanza bene, ma è documentata qui .

A proposito, dai un'occhiata a questi fantastici progetti:


3

MEGAcmd

C'è megacmd , l'interfaccia della riga di comando ufficiale. Puoi anche crearlo da sorgenti su github su https://github.com/meganz/MEGAcmd

megacmd è un wrapper per Mega SDK e se decidi di compilarlo da solo avrai bisogno delle stesse dipendenze (su ubuntu) di quelle elencate di seguito per Mega SDK.

Per i dettagli sull'utilizzo vedere la Guida per l'utente di MEGAcmd .

Mega SDK

Mega SDK che può essere compilato seguendo i passaggi nella pagina GitHub . Include l' megacliutilità che è una shell interattiva per la sincronizzazione e il download / caricamento.

## 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 modulo python (deprecato)

Per chi ha trovato questa domanda cercando una vera ricetta per scaricare un collegamento in modalità testo ecco un semplice script python che utilizza il modulo mega.py (installalo con 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])

Lo script funziona con python 2.7 e accetta l'URL del collegamento mega.nz.

getpass viene utilizzato per inserire in modo sicuro la password nella console al fine di evitare di memorizzare la password nello script - se ti senti a tuo agio nel codificare la password, impostala nella riga # 7.

megatools

Sulla maggior parte delle macchine Linux / posix puoi installare megatools da repository standard, ad es

Su ubuntu / debian:

apt install megatools

Su MacOS:

brew install megatools

Una volta installato, troverai una serie di utilità della riga di comando, tra le megadlquali puoi scaricare sia i file condivisi che i tuoi file. Vedere megadl -hper i dettagli.


0

A partire dal 2020, puoi utilizzare i Service Worker per integrare perfettamente il tuo codice personalizzato con il download manager integrato del browser: https://developers.google.com/web/updates/2016/06/sw-readablestreams

Immagino anche che avresti le seguenti intestazioni per poter scaricare un file invece di essere visualizzato:

 headers: {
   'Content-Type': 'application/octet-stream',
   'Content-Disposition': 'attachment; filename="your_filename.bin"',
 }

Personalmente ho scoperto che questo approccio funziona perfettamente sia in Google Chrome che in Firefox e lo sto già utilizzando in produzione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.