Como é o nome do arquivo de download escolhido e se existe uma maneira de mudar isso?
-
23-08-2019 - |
Pergunta
Eu tenho um link para um arquivo não no meu servidor:
<a href="history.nasa.gov/monograph15b.pdf">NASA</a>
Gostaria de fazê-lo de modo que quando um visitante clica no link para download, o nome que iria aparecer para o PDF seria NASA.pdf, e não monograph15b.pdf.
Isso é possível em qualquer idioma?
Solução
Se você não está indo para hospedar o arquivo, você pode ser capaz de ler no conteúdo do arquivo e, em seguida, enviar esses conteúdos diretamente para o navegador com os cabeçalhos apropriados.
Note que esta será lenta porque você vai ser re-download do arquivo da NASA cada vez que sua página PHP é executado.
<?php
$filename = "http://history.nasa.gov/monograph15b.pdf";
$outputfilename = "NASA.pdf";
header("Content-Type: application/pdf");
header("Content-Disposition: attachment; filename=\"" . basename($outputfilename) . "\";" );
header("Content-Transfer-Encoding: binary");
readfile("$filename");
?>
Esta abordagem também exige que o PHP ser configurado de modo que fopen () pode lidar com a leitura de um arquivo via HTTP.
Outras dicas
A única maneira de realmente fazer isso é primeiro fazer o download do arquivo em questão para o seu próprio servidor, nomeá-lo como quiser, e depois servir-lo de volta para seus usuários finais.
Olhe para o cabeçalho HTTP Content-Disposition cabeçalho, ele irá permitir que você especifique o nome do arquivo.
Você precisa usar qualquer tecnologia do lado do servidor, como ASP.NET. Onde em você colocar em um botão na página. Quando o botão é clicado ele irá executar as seguintes tarefas.
1) Response.Clear ();.
2) Response.AddHeader ( "Content-Disposition",. "Anexo; nome do ficheiro = Nasa.pdf");
3) Response.ContentType = "aplicação / octeto de fluxo";.
4) Response.WriteFile (context.Server.MapPath ( "history.nasa.gov/monograph15b.pdf").); // você precisa definir o caminho realtively correto para sua aplicação.