Eu tenho o código a seguir para permitir que os usuários baixem cadeias de dados no arquivo csv.
exportData = 'data:text/csv;charset=utf-8,';
exportData += 'some csv strings';
encodedUri = encodeURI(exportData);
newWindow = window.open(encodedUri);
Funciona muito bem que, se o cliente executa o código, ele gera uma página em branco e começa a baixar os dados no arquivo csv.
Então, eu tentei fazer isso com o objeto JSON como
exportData = 'data:text/json;charset=utf-8,';
exportData += escape(JSON.stringify(jsonObject));
encodedUri = encodeURI(exportData);
newWindow = window.open(encodedUri);
Mas vejo apenas uma página com os dados JSON exibidos nela, não fazendo o download.
Passei por algumas pesquisas e esta afirma funcionar, mas não vejo nenhuma diferença no meu código.
Estou faltando alguma coisa no meu código?
Obrigado por ler minha pergunta :)
fonte
var storageObj = []; for (var i=0; i<1000000; ++i) storageObj.push('aaa');
fornece "Download com falha - erro de rede" no Chrome 61JSON.stringify(exportObj, null, 2)
vezEncontrei uma resposta.
parece funcionar bem para mim.
** Todo o crédito é para @ cowboy-ben-alman, que é o autor do código acima **
fonte
Esta seria uma versão JS pura (adaptada do cowboy):
http://jsfiddle.net/sz76c083/1
fonte
Você pode tentar usar:
saveAs()
Não há necessidade de lidar com nenhum elemento HTML.
Se você quiser imprimir bastante o JSON, de acordo com esta resposta , poderá usar:
fonte
O seguinte funcionou para mim:
e então chamá-lo assim
fonte
initMouseEvent()
é um padrão da Web obsoleto e não deve mais ser usado. Em vez disso, use anew MouseEvent()
interface. É apenas um refator menor, no entanto.Recentemente, tive que criar um botão que baixasse um arquivo json de todos os valores de um formulário grande. Eu precisava disso para trabalhar com o IE / Edge / Chrome. Isto é o que eu fiz:
Houve um problema com o nome do arquivo e a extensão no Edge, mas no momento da redação deste documento parecia haver um bug no Edge que deveria ser corrigido.
Espero que isso ajude alguém
fonte
document.body.appendChild(a); a.style.display = 'none';
para fazê-lo funcionar no Firefox.Solução simples e limpa para aqueles que segmentam apenas navegadores modernos:
fonte
A
download
propriedade dos links é nova e não é suportada no Internet Explorer (consulte a tabela de compatibilidade aqui ). Para uma solução de navegador cruzado para esse problema, daria uma olhada no FileSaver.jsfonte
Reagir : adicione isso onde desejar no seu método de renderização.
• Objeto no estado :
• Objeto em adereços :
className e style são opcionais, modifique o estilo de acordo com suas necessidades.
fonte
Tente definir outro tipo MIME:
exportData = 'data:application/octet-stream;charset=utf-8,';
Mas pode haver problemas com o nome do arquivo na caixa de diálogo Salvar.
fonte
data = "data:application/octet-stream;charset=utf-8," + encodeURIComponent(JSON.stringify(data)); window.open(data);
ele simplesmente baixa o arquivo como "download", mas os dados que eu codifiquei e depois codi-uri são como deveriam.Se você preferir o snippet do console, raser, do que o nome do arquivo, faça o seguinte:
fonte