用户使用我的PHP应用程序上传PDF文件,然后将它们存储在S3上。稍后其他用户查看文件,我在浏览器中显示“内联”。
问题是PDF的“标题”属性显示在浏览器选项卡中,通常会显示网站标题。由于它是由执行原始上传的用户设置的,因此它是任意的,因此我需要更改它。我该怎么做呢?
我认为Title是文件的扩展属性,但是安装了Ubuntu的xattr,当我在文件上运行它时,它什么也没有返回,所以也许我错了。
当我在S3上查看对象元数据时,没有提到Title属性,因此我不知道它在S3上的存储位置和方式。
我的偏好是使用OS调用重写Title属性,而不是安装另一个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);
}
当你说'内联'时,你究竟是什么意思?您所描述的内容似乎更像是将它们指向文档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嵌入在移动浏览器中是众所周知的古怪。
您应该可以向Content-Disposition 添加任意文件名以进行内联查看,就像您下载时一样。尝试这样的事情:
$headers = ['Content-Type' => 'application/pdf', 'Content-Disposition' => 'inline; filename=\"WhateverYouWantTheUsersToSee\"'];
(实际上不知道是否需要转义那些引号;如果没有,请取出反斜杠。)