На веб-сайте я работаю над тем, чтобы предлагать пользователям две ссылки для каждой загрузки: "Просмотр" и "Загрузка". Большинство, если не все эти загрузки, будут в формате PDF. Цель View - заставить документ отображаться в браузере с помощью плагина/расширения PDF, тогда как ссылка "Загрузить" заставляет загружать файлы на локальное хранилище.
У меня это работает так:
<div class="DownloadLinks">
<a href="./images/services/example.pdf">View</a>
<a href="./images/services/example.pdf" download="">Download</a></div>
</div>
Но теперь я хочу сделать это таким образом (используя PHP для хранения и получения документов), и он больше не работает:
<div class="DownloadLinks">
<div class="DownloadLinks"><a href="./get_document.php?doc_id=3">View</a>
<a href="./get_document.php?doc_id=3" download="">Download</a></div>
</div>
Я думаю, проблема может заключаться в том, что браузер не видит расширение файла в ссылке, поэтому выполняет загрузку вместо запуска плагина PDF. К сожалению, я просто использую систему управления контентом, и у меня нет доступа к скрипту PHP, и я ничего не могу изменить. Как я могу заставить это работать по назначению?
Я бы порекомендовал просто использовать javascript из-за вашей CMS. Здесь хорошая функция для этого.
var downloadURL = function downloadURL(url) {
var hiddenIFrameID = 'hiddenDownloader', iframe = document.getElementById(hiddenIFrameID);
if (iframe === null) {
iframe = document.createElement('iframe');
iframe.id = hiddenIFrameID;
iframe.style.display = 'none';
document.body.appendChild(iframe);
}
iframe.src = url;
};
Это будет для сценария загрузки. Если вы хотите использовать php, чтобы вы могли отслеживать количество загрузок (или что-то подобное по линиям), вы могли бы просто использовать AJAX для этого.
Вам нужно добавить следующие заголовки в get_document.php, когда вы нажимаете ссылку для загрузки (для указания этого может потребоваться дополнительный параметр GET):
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Content-Length: ' . filesize($file));
Где $ file - это путь к вашему файлу, вы можете вручную заменить имя и размер файла, но убедитесь, что имя содержит правильное расширение.
Изменить, вы говорите, что у вас нет доступа к CMS - как насчет HTTP-сервера? Или это хостинг-сервис?
onclick="downloadURL('files/doc1.pdf')"