У меня есть исходный URL, который отображает PDF-документ в браузере. Предполагается загрузить автоматически.
Пример URL: http://doc.local.com/storage/temporary/2020-02-19/c3e175b4706492be8c0d90e497c86ea7/test.pdf
Точно хочу реализовать, как работает временный URL amazon s3 (они добавили все заголовки в URL)
response-content-disposition=attachment
Пожалуйста, не предлагайте мне использовать следующий код, так как интерфейс ожидает URL
header("Content-Length: " . filesize($file)); header("Content-Type: application/octet-stream;"); readfile($file);
У меня есть небольшой взлом для выполнения этой задачи -
Давайте предположим, что ваш URL-это что-то -
https://somedomain.com/somepath/file.pdf
Создайте API, как показано ниже -
https://somedomain.com/somepath/file.pdf?signature=signature&ttl=some-ttl
Затем после проверки запроса API Вы можете вернуть ответ о загрузке, как показано ниже -
public function getDownload() { //PDF file is stored under project/public/download/info.pdf $file= public_path(). "/download/info.pdf"; $headers = array( 'Content-Type: application/pdf', ); return Response::download($file, 'filename.pdf', $headers); }
ref - Загрузка файлов в laravel с использованием Response :: download
Простое решение от внешнего интерфейса.
Если внешний интерфейс имеет href и запускает его, этот код будет работать наверняка.
Я тестировал в самом PHP здесь, здесь это код.
$url = 'http://doc.local.com/storage/temporary/2020-02-19/c3e175b4706492be8c0d90e497c86ea7/test.pdf'; echo '<a download href="'. $url .'" target="_blank">click</a>';
Если внешний интерфейс перенаправляет URL вместо триггера, нужно найти решение.
Я считаю, что это функция вашего браузера вместо реального кода. Большинство современных браузеров имеют функцию автоматического открытия PDF-файлов внутри окна браузера. Этот параметр задает c для вашего браузера.
Google Chrome:
Настройки -> Настройки сайта -> Документы PDF