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?
fonte
Respostas:
Mega usa vários métodos diferentes para fazer isso: (em 27 de novembro de 2013)
(fonte: https://eu.static.mega.co.nz/js/download_6.js )
fonte
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
range
geral, 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:
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
fetch
o 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:
fonte
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
megacli
utilitá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.
megatools
Na maioria das caixas Linux / posix, você pode instalar megatools de repositórios padrão, ou seja,
No ubuntu / debian:
No MacOS:
Depois de instalado, você encontrará vários utilitários de linha de comando, entre os
megadl
quais pode baixar arquivos compartilhados e seus próprios arquivos. Vejamegadl -h
para detalhes.fonte
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.
fonte