Baixe arquivos como mega.co.nz

89

Hoje eu verifiquei o mega.co.nz e estou animado com alguns recursos. Por exemplo, na página de download, ele baixará os arquivos no navegador e depois os descriptografará com javascript.

por exemplo, consulte este link para baixar um arquivo png:

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

neste link iniciará o download dentro do navegador. Eu verifiquei a guia de rede no elemento inspecionar. Ele fará o download de partes do arquivo com AJAX após completar todas as partes do arquivo e salvará todos eles em um arquivo no computador automaticamente!

eu quero saber o que eles fazem? você pode explicar ou criar um link para algum recurso sobre download de arquivos dentro de um navegador como esse?

também pode fazer isso apenas com javascript ou deve usar alguns plug-ins de flash ou algo parecido?

Amir Molaa
fonte
3
Sim, e se você fizer o download de um arquivo grande, o sistema
ficará

Respostas:

103

Mega usa vários métodos diferentes para fazer isso: (em 27 de novembro de 2013)

  1. API do sistema de arquivos (polyfill de extensão do Chrome / Firefox)
  2. Adobe Flash SWF Filewriter (substituto de navegadores antigos)
  3. BlobBuilder (IE10 / IE11)
  4. Extensão MEGA do Firefox (obsoleta)
  5. Arraybuffer / Blob (na memória) + a [download] (para navegadores que oferecem suporte a [download])
  6. MediaSource (solução de streaming experimental)
  7. Blob armazenado no armazenamento IndexedDB + a [download] (Firefox 20+, melhoria em relação ao método Blob na memória)

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

roberto
fonte
mas acho que funciona no firefox também. Encontrei uma amostra aqui jsfiddle.net/kGLnP/5 . este exemplo funciona corretamente no Chrome e no Firefox. mas o que eles fazem para outros navegadores, como safari ou ópera? Também posso baixar links do mega.co.nz com esses navegadores.
Amir Molaa
1
Sim, o exemplo que você forneceu ( jsfiddle.net/kGLnP/5 ) deve funcionar para o Firefox, mas apenas os mais recentes (versão 20 ou posterior, consulte developer.mozilla.org/en-US/docs/HTML/Element/a para mais informações sobre suportes). Acabei de ler o código JavaScript do Mega e atualizei minha resposta. (Ele responderá à sua pergunta sobre outros navegadores. Basicamente, eles recorrerão ao uso do flash quando não puderem usar soluções somente JS.)
roberto
Uau, acabei de ver este site ontem e ia fazer a mesma pergunta. Quando tentei baixar um mod de jogo, fiquei surpreso com o download iniciado imediatamente dentro do navegador, mostrando minha velocidade total !!! Eu estava usando o FF 20.0.1.
Wel,
A resposta de roberto ainda está atualizada? Eu tentei baixar um arquivo grande do mega.co.nz no firefox e desativei o flash e ainda funcionou. Ao tentar baixar um arquivo grande, o firefox está pedindo aprovação para armazenar mais de 50 MB, o que me faz pensar que eles usam indexedDB.
shacharz
1
Não, não está (realmente) atualizado, o script de download atual está aqui: eu.static.mega.co.nz/download_46.js . Dei uma olhada rápida e ainda são mais ou menos os mesmos truques com algumas novas adições, incluindo melhorias de desempenho por cache (usando IndexedDB, como você adivinhou). Atualizarei minha resposta quando tiver tempo de ler o código.
roberto
4

Uma implementação básica do downloader no navegador com várias partes usando APIs de Blob e URL é apresentada aqui . Ele baixa um arquivo em 4 solicitações simultâneas e mostra o progresso também. Observe que, em rangegeral, a configuração do cabeçalho pode não ser uma boa ideia em solicitações XHR, dê uma olhada neste tópico .

Durante o download:

Durante o download

Após o download:

Após o download

Outro tópico interessante seria a implementação da funcionalidade Pause / Resume do Mega. A API XHR dos navegadores atuais não oferece esse recurso, então a única chance que você tem é fazer download de vários pedaços pequenos e desistir da parte baixada de seus pequenos pedaços, da maneira que parece ser feito no Mega também. Mas fetcho recurso de streaming pode ser usado para esse propósito, eu não explorei isso ainda bem o suficiente, mas está documentado aqui .

A propósito, dê uma olhada nestes projetos incríveis:

Ebrahim Byagowi
fonte
2

MEGAcmd

Existe o megacmd , a interface oficial da linha de comando. Você também pode construí-lo a partir de fontes no github em https://github.com/meganz/MEGAcmd

megacmd é um wrapper em torno do Mega SDK e se você decidir compilá-lo sozinho, precisará das mesmas dependências (no ubuntu) que as listadas abaixo para o Mega SDK.

Para obter detalhes sobre o uso, consulte o Guia do usuário MEGAcmd .

Mega SDK

Mega SDK que pode ser compilado seguindo as etapas na página do github . Inclui o megacliutilitário que é um shell interativo para sincronizar e fazer download / upload.

## 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 quem encontrou esta questão procurando uma receita real para baixar um link em modo texto, aqui está um script python simples que usa o módulo mega.py (instale-o com 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])

O script funciona com o python 2.7 e leva o URL do link mega.nz.

getpass é usado para inserir a senha com segurança no console, a fim de evitar o armazenamento da senha no script - se você se sentir confortável em codificar permanentemente a senha, defina-a na linha # 7.

megatools

Na maioria das caixas Linux / posix, você pode instalar megatools de repositórios padrão, ou seja,

No ubuntu / debian:

apt install megatools

No MacOS:

brew install megatools

Depois de instalado, você encontrará vários utilitários de linha de comando, entre os megadlquais pode baixar arquivos compartilhados e seus próprios arquivos. Veja megadl -hpara detalhes.

ccpizza
fonte
0

A partir de 2020, você pode usar os Service Workers para integrar perfeitamente seu código personalizado com o gerenciador de download embutido do navegador: https://developers.google.com/web/updates/2016/06/sw-readablestreams

Também acho que você teria os seguintes cabeçalhos para que um arquivo fosse baixado em vez de visualizado:

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

Pessoalmente, descobri que essa abordagem funciona perfeitamente tanto no Google Chrome quanto no Firefox, e já a estou usando na produção.

vdudouyt
fonte