Как выбирается имя файла загрузки и можно ли его изменить?

StackOverflow https://stackoverflow.com/questions/894298

  •  23-08-2019
  •  | 
  •  

Вопрос

У меня есть ссылка на файл не на моем сервере:

<a href="history.nasa.gov/monograph15b.pdf">NASA</a>

Я хотел бы сделать так, чтобы, когда посетитель нажимал на ссылку для загрузки, имя PDF-файла отображалось бы как NASA.pdf, а не monograph15b.pdf.

Возможно ли это на каком-либо языке?

Это было полезно?

Решение

Если вы не собираетесь размещать файл самостоятельно, вы можете прочитать его содержимое, а затем отправить его непосредственно в браузер с соответствующими заголовками.

Обратите внимание, что это будет медленно, поскольку вам придется повторно загружать файл из НАСА каждый раз, когда запускается ваша страница PHP.

<?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");
?>

Этот подход также требует, чтобы PHP был настроен так, чтобы fopen() может обрабатывать чтение файла через HTTP.

Другие советы

Единственный способ сделать это — сначала загрузить соответствующий файл на свой сервер, назвать его по своему усмотрению, а затем вернуть его конечным пользователям.

Посмотрите заголовок HTTP Содержание-Расположение заголовок, он позволит вам указать имя файла.

Вам необходимо использовать любую серверную технологию, например ASP.NET.Где вы помещаете кнопку на странице.При нажатии кнопки он будет выполнять следующие задачи.

1.) Ответ.Очистить();

2.) Response.AddHeader("Content-Disposition", "attachment;имя_файла=НАСА.pdf");

3.) Response.ContentType = "application/octet-stream";

4.) Response.WriteFile(context.Server.MapPath("history.nasa.gov/monograph15b.pdf"));// вам нужно установить действительно правильный путь для вашего приложения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top