Estou brincando com a idéia de criar um utilitário zip / descompactar completamente baseado em JavaScript que qualquer pessoa possa acessar de um navegador. Eles podem simplesmente arrastar o zip diretamente para o navegador e isso permitirá que eles baixem todos os arquivos. Eles também podem criar novos arquivos zip arrastando arquivos individuais para dentro.
Eu sei que seria melhor fazê-lo no servidor, mas este projeto é apenas um pouco divertido.
Arrastar arquivos para o navegador deve ser fácil se eu tirar proveito dos vários métodos disponíveis. (Estilo Gmail)
Espero que a codificação / decodificação esteja correta. Eu vi algumas bibliotecas as3 zip, então eu tenho certeza que devo ficar bem com isso.
Meu problema está baixando os arquivos no final.
window.location = 'data:jpg/image;base64,/9j/4AAQSkZJR....'
isso funciona bem no firefox, mas não no chrome.
Posso incorporar os arquivos como imagens no Chrome <img src="data:jpg/image;ba.." />
, mas os arquivos não serão necessariamente imagens. Eles podem ter qualquer formato.
Alguém pode pensar em outra solução ou algum tipo de solução alternativa?
fonte
Respostas:
Ideias:
Experimente um
<a href="data:...." target="_blank">
(não testado)Use downloadify em vez de URLs de dados (funcionaria também para o IE)
fonte
Se você também quiser dar um nome sugerido ao arquivo (em vez do 'download' padrão), use o seguinte no Chrome, Firefox e em algumas versões do IE:
E o exemplo a seguir mostra seu uso:
fonte
link.click()
em vez de seueventFire
-função ... jsfiddle.net/ARTsinn/Ezx5mou:
fonte
Deseja compartilhar minha experiência e ajudar alguém preso aos downloads que não estão funcionando no Firefox e resposta atualizada para 2014. O snippet abaixo funcionará no firefox e no chrome e aceitará um nome de arquivo:
fonte
download
atributo. De qualquer forma, obrigado, isso é o mais próximo que posso chegar no momento.btoa
não for definida (por exemplo, no nó eslinted projecto interface)const btxt = new Buffer(text).toString('base64'); const uri = 'data:text/csv;charset=utf-8;base64,' + btxt + ';'
Aqui está uma solução JavaScript pura que testei trabalhando no Firefox e Chrome, mas não no Internet Explorer:
Soluções entre navegadores encontradas até agora:
downloadify -> Requer Flash
databounce -> Testado no IE 10 e 11 e não funciona para mim. Requer um servlet e alguma personalização. (Detecta incorretamente o navegador. Eu tive que configurar o IE no modo de compatibilidade para testar, charset padrão no servlet, objeto de opções JavaScript com o caminho correto do servlet para caminhos absolutos ...) Para navegadores que não sejam do IE, ele abre o arquivo na mesma janela.
download.js -> http://danml.com/download.html Outra biblioteca semelhante, mas não testada. Alega ser JavaScript puro, não requer servlet nem Flash, mas não funciona no IE <= 9.
fonte
Existem várias soluções, mas elas dependem do HTML5 e ainda não foram implementadas completamente em alguns navegadores. Os exemplos abaixo foram testados no Chrome e Firefox (parcialmente funciona).
document.location.href
URI de dados.<a href="your-data-uri" download="filename.txt">
para especificar o nome do arquivo.fonte
Combinando respostas do @owencm e do @ Chazt3n, essa função permitirá o download de texto do IE11, Firefox e Chrome. (Desculpe, não tenho acesso ao Safari ou Opera, mas por favor, adicione um comentário se você tentar e funcionar.)
fonte
Para qualquer pessoa com problemas no IE:
Voto a favor da resposta aqui de Yetti: salvando a tela localmente no IE
fonte
Seu problema basicamente se resume a "nem todos os navegadores suportam isso".
Você pode tentar uma solução alternativa e veicular os arquivos descompactados de um objeto Flash, mas perderá a pureza somente de JS (de qualquer forma, não tenho certeza se atualmente você pode "arrastar arquivos para o navegador" sem algum tipo de solução alternativa do Flash. - esse recurso talvez seja um HTML5?)
fonte