Preciso que o navegador baixe os arquivos de imagem exatamente como faz ao clicar em uma planilha do Excel.
Existe uma maneira de fazer isso usando apenas a programação do lado do cliente?
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript" src="Scripts/jquery-1.10.2.js">
$(document).ready(function () {
$("*").click(function () {
$("p").hide();
});
});
</script>
</head>
<script type="text/javascript">
document.onclick = function (e) {
e = e || window.event;
var element = e.target || e.srcElement;
if (element.innerHTML == "Image") {
//someFunction(element.href);
var name = element.nameProp;
var address = element.href;
saveImageAs1(element.nameProp, element.href);
return false; // Prevent default action and stop event propagation
}
else
return true;
};
function saveImageAs1(name, adress) {
if (confirm('you wanna save this image?')) {
window.win = open(adress);
//response.redirect("~/testpage.html");
setTimeout('win.document.execCommand("SaveAs")', 100);
setTimeout('win.close()', 500);
}
}
</script>
<body>
<form id="form1" runat="server">
<div>
<p>
<a href="http://localhost:55298/SaveImage/demo/Sample2.xlsx" target="_blank">Excel</a><br />
<a href="http://localhost:55298/SaveImage/demo/abc.jpg" id="abc">Image</a>
</p>
</div>
</form>
</body>
</html>
Como deve funcionar em caso de download de uma planilha do Excel (o que os navegadores fazem)?
javascript
jquery
html
Amit
fonte
fonte
download
atributo.Respostas:
Usando HTML5 você pode adicionar o atributo 'download' aos seus links.
<a href="https://stackoverflow.com/path/to/image.png" download>
Os navegadores compatíveis solicitarão o download da imagem com o mesmo nome de arquivo (neste exemplo, image.png).
Se você especificar um valor para este atributo, ele se tornará o novo nome de arquivo:
<a href="https://stackoverflow.com/path/to/image.png" download="AwesomeImage.png">
ATUALIZAÇÃO: a partir da primavera de 2018, isso não é mais possível para
href
s de origem cruzada . Portanto, se você deseja criar<a href="https://i.imgur.com/IskAzqA.jpg" download>
em um domínio diferente de imgur.com, não funcionará como esperado. Anúncio de suspensão de uso e remoções do Chromefonte
Eu consegui fazer isso funcionar no Chrome e Firefox também anexando um link para o documento.
fonte
document.body.appendChild(link)
, não funcionará no firefox. Também é bom remover o elemento criado comdocument.body.removeChild(link);
afterlink.click()
setTimeout( function () { link.parentNode.removeChild( link ); },10 );
fonte
Atualização da primavera de 2018
Embora ainda seja compatível, a partir de fevereiro de 2018, o chrome desativou esse recurso para download de origem cruzada, o que significa que isso só funcionará se o arquivo estiver localizado no mesmo nome de domínio.
Eu descobri uma solução alternativa para baixar imagens entre domínios após a nova atualização do Chrome que desabilitou o download entre domínios. Você pode modificar isso em uma função para atender às suas necessidades. Você pode conseguir obter o tipo de imagem mime (jpeg, png, gif, etc) com mais pesquisas, se necessário. Pode haver uma maneira de fazer algo semelhante a isso com os vídeos também. Espero que isso ajude alguém!
fonte
Uma abordagem mais moderna usando Promise e async / await:
então
Encontre a documentação aqui: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
fonte
fonte
Esta é uma solução geral para o seu problema. Mas há uma parte muito importante que a extensão do arquivo deve corresponder à sua codificação. E, claro, esse parâmetro de conteúdo da função downlowadImage deve ser uma string codificada em base64 de sua imagem.
fonte
Em 2020, eu uso o Blob para fazer uma cópia local da imagem, cujo navegador fará o download como um arquivo. Você pode testá-lo neste site .
fonte
Experimente isto:
fonte
fonte
Você pode baixar este arquivo diretamente usando a tag âncora sem muito código.
Copie o snippet e cole em seu editor de texto e experimente ...!
fonte
Que tal usar a função .click () e a tag?
(Versão comprimida)
Agora você pode acioná-lo com js. Também não abre, como em outros exemplos, arquivos de imagem e texto!
(versão da função js)
fonte
eu achei aquilo
<a href="link/to/My_Image_File.jpeg" download>Download Image File</a>
não funcionou para mim. Não sei por quê.
Eu descobri que você pode incluir um
?download=true
parâmetro no final do seu link para forçar um download. Acho que percebi essa técnica sendo usada pelo Google Drive.Em seu link, inclua
?download=true
no final de seu href.Você também pode usar esta técnica para definir o nome do arquivo ao mesmo tempo.
Em seu link, inclua
?download=true&filename=My_Image_File.jpeg
no final de seu href.fonte
Você não precisa escrever js para fazer isso, basta usar:
E o próprio navegador fará o download da imagem automaticamente.
Se por algum motivo não funcionar, adicione o atributo de download. Com este atributo, você pode definir um nome para o arquivo para download:
fonte
download
atributo não é compatível com todos os navegadores.