Как выбирается имя файла загрузки и можно ли его изменить?
-
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"));// вам нужно установить действительно правильный путь для вашего приложения.