Se, por exemplo, você seguir o link:
data:application/octet-stream;base64,SGVsbG8=
O navegador solicitará que você baixe um arquivo que consiste nos dados mantidos como base64 no próprio hiperlink. Existe alguma maneira de sugerir um nome padrão na marcação? Caso contrário, existe uma solução JavaScript?
data:application/pdf;name=document.pdf;base64,BASE64_DATA_ENCODED
Respostas:
Use o
download
atributo:Exemplo vivo no html5-demos.appspot.com / ... .
Atualmente, funciona no Chrome, Firefox, Edge, Opera e Safari de desktop, mas não no iOS Safari ou IE11.
fonte
window.location.replace
. se, por exemplo, você deseja criar um dado: uri ou um gerado porwindow.URL.createObjectURL
, e fazer o download como arquivo, será necessário criar um <a> e clicar nele: jsfiddle.net/flyingsheep/wpQtH (não,$(...).click()
não funciona)$('<a href="data:text/plain,Test" download="test.txt">')[0].click()
parece funcionar bem aqui (Chrome 23) (nota: usei oclick
método nativo , não o jQuery). ExemploAtualmente, o Chrome simplifica muito isso:
fonte
Apenas HTML: use o
download
atributo:Somente Javascript: você pode salvar qualquer URI de dados com este código:
Chrome, Firefox e Edge 13+ usarão o nome do arquivo especificado.
O IE11, Edge 12 e Safari 9 (que não suportam o
download
atributo ) farão o download do arquivo com o nome padrão ou eles simplesmente o exibirão em uma nova guia, se for do tipo de arquivo suportado: imagens, vídeos, arquivos de áudio ,…fonte
downloadjs
em npmdata:
URI, que é o que a pergunta menciona. Essa resposta também trabalha com Blobs e tudo aquilo que tem um URIDe acordo com a RFC 2397 , não, não existe.
Também não parece haver nenhum atributo do<a>
elemento que você possa usar.No entanto, o HTML5 introduziu posteriormente o
download
atributo no<a>
elemento, embora no momento da gravação o suporte não seja universal (sem suporte ao MSIE, por exemplo)fonte
Procurei um pouco nas fontes do firefox em netwerk / protocol / data / nsDataHandler.cpp
manipulador de dados analisa apenas conteúdo / tipo e conjunto de caracteres e verifica se há "; base64" na sequência
o rfc não especifica nome de arquivo e, pelo menos, o Firefox não lida com nome de arquivo, o código gera um nome aleatório mais ".part"
Eu também verifiquei o log do firefox
arquivos interessantes se você quiser ver fontes do mozilla:
Acho que você pode parar de procurar uma solução por enquanto, porque suspeito que não exista :)
conforme observado neste tópico, o html5 tem
download
atributo, mas também funciona no firefox 20 http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#attr-hyperlink-downloadfonte
O seguinte snippet Javascript funciona no Chrome usando o novo atributo 'baixar' dos links e simulando um clique.
E o exemplo a seguir mostra seu uso:
fonte
Não.
O objetivo todo é que seja um fluxo de dados, não um arquivo. A fonte de dados não deve ter nenhum conhecimento do agente do usuário que a manipula como um arquivo ... e não.
fonte
data:
é falsificar um bloco de dados internos no formato de URL sem precisar lê- lo de uma fonte baseada em protocolo. O link na resposta do @ silex mostra que a capacidade de sugerir um nome preferido para o escrever é considerada útil, mesmo que ainda não esteja implementada.data:
foi inventado especificamente para permitir que o conteúdo interno (pequeno) apareça em um formato de URL falsificado, para que pudesse ser usado por coisas como tags de imagem sem uma solicitação HTTP separada. O HTML diz que o conteúdo de umimg src
atributo deve ser um URL, e foi isso que o RFC 2397 criou. Não há "fonte de dados".você pode adicionar um atributo de download ao elemento âncora.
amostra:
fonte
Veja este link: http://lists.w3.org/Archives/Public/uri/2010Feb/0069.html
Citar:
Também há algumas informações nas mensagens restantes da discussão.
fonte
Usando trabalhadores de serviço , isso é finalmente possível no sentido mais verdadeiro.
<a href, <img src
, window.open (url), absolutamente tudo o que pode ser feito com um URL "real".O navegador agora sugere myPrettyName.jpg mesmo que o usuário abra o arquivo em uma nova guia e tente salvá-lo lá. Será exatamente como se o arquivo tivesse vindo do servidor.
fonte
Há um pequeno script de solução alternativa no Google Code que funcionou para mim:
http://code.google.com/p/download-data-uri/
Ele adiciona um formulário com os dados, o envia e remove o formulário novamente. Hacky, mas fez o trabalho para mim. Requer jQuery.
Esse tópico apareceu no Google antes da página do Google Code e achei que seria útil ter o link aqui também.
fonte
data:...
URI, esse script cria um formulário para enviá-lo ao servidor. E o servidor provavelmente o repete como uma resposta HTTP "download" (ou seja, com um cabeçalho de Disposição de Conteúdo apropriado especificando o nome do arquivo).Aqui está uma versão do jQuery baseada na versão de Holf e funciona com Chrome e Firefox, enquanto sua versão parece funcionar apenas com o Chrome. É um pouco estranho adicionar algo ao corpo para fazer isso, mas se alguém tiver uma opção melhor, eu sou a favor.
fonte
$().appendTo()
a uma variável, em seguida, chamandovariable.click(); variable.remove()
[0]
de qualquer "elemento jQuery" deve retornar o primeiro elemento DOM que ele representa, o que essencialmente "tira você de" jQuery.É meio brincalhão, mas eu já estive na mesma situação antes. Eu estava gerando dinamicamente um arquivo de texto em javascript e queria fornecê-lo para download, codificando-o com o URI de dados.
Isso é possível com
umaintervençãomenor dousuário principal. Gere um link<a href="data:...">right-click me and select "Save Link As..." and save as "example.txt"</a>
. Como eu disse, isso é deselegante, mas funciona se você não precisar de uma solução profissional.Isso pode ser menos doloroso usando o flash para copiar o nome para a área de transferência primeiro. Obviamente, se você se permitir usar Flash ou Java (agora com menos e menos suporte a navegador, eu acho?), Provavelmente poderá encontrar outra maneira de fazer isso.
fonte
download
para sugerir um nome, como mencionado em muitas outras respostas .Este funciona com o Firefox 43.0 (antigo não testado):
dl.js:
dl.html
Se clicar no botão, ele oferece um arquivo chamado hello.bin para download. O truque é usar o arquivo em vez do Blob .
referência: https://developer.mozilla.org/de/docs/Web/API/File
fonte
fonte
Você pode conseguir isso no Chrome e no FireFox.
Tente o seguinte URL, ele fará o download do código que foi usado.
fonte