Как изменить атрибут заголовка файла с помощью PHP - PullRequest
0 голосов
/ 18 марта 2019

Пользователи загружают файлы PDF, используя мое приложение PHP, и я сохраняю их на S3.В какой-то момент позже другие пользователи просматривают файлы, которые я отображаю «встроенными» в своем браузере.

Проблема заключается в том, что атрибут «Заголовок» PDF-файла отображается на вкладке браузера, где заголовок веб-сайта будет отображаться.нормально отображаться.Поскольку это установлено пользователем, который сделал исходную загрузку, это произвольно, и поэтому я должен изменить это.Как мне это сделать?

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

Когда я просматриваю метаданные объекта на S3, там не упоминается атрибут Title, поэтому я не знаю, где и как он хранится на S3.

Я предпочел бы переписатьЗаголовок не требует использования вызова ОС, а не установки другого расширения PHP (такого как xattr).

РЕДАКТИРОВАТЬ: Вот метод контроллера Laravel, который возвращает ответ

public function displayFile($id)
{
    $headers = ['Content-Type' => 'application/pdf', 'Content-Disposition' => 'inline'];
    return response(Storage::disk('private')->get("files/{$id}.pdf"), 200, $headers);
}

Ответы [ 2 ]

1 голос
/ 19 марта 2019

Когда вы говорите «встроенный», что именно вы имеете в виду? То, что вы описываете, больше похоже на то, что вы указываете их на URL документа. В этом случае заголовок будет тем, который содержится в PDF, который может изменить только какой-либо редактор PDF. Я не знаю ни одного, который не сломал бы файлы (особенно те, которые содержат интерактивный контент) ПЛОХО для PHP. Если у вас есть доступ к собственным приложениям, вы можете попробовать использовать exiftool: https://askubuntu.com/questions/27381/how-to-edit-pdf-metadata-from-command-line

То, что вы, возможно, захотите сделать, это отобразить документ внутри HTML-файла, например так: https://www.w3docs.com/snippets/html/how-to-embed-pdf-in-html.html Примечание: проведите обширное тестирование для различных браузеров, особенно мобильных; Как известно, встраивание PDF-файлов необычно в мобильных браузерах.

0 голосов
/ 19 марта 2019

Вы должны иметь возможность добавить произвольное имя файла в Content-Disposition для встроенного просмотра, так же, как если бы вы загружали. Попробуйте что-то вроде этого:

$headers = ['Content-Type' => 'application/pdf', 'Content-Disposition' => 'inline; filename=\"WhateverYouWantTheUsersToSee\"'];

(На самом деле не знаю, нужно ли вам избегать этих кавычек; если нет, уберите обратную косую черту.)

...