繁体   English   中英

如何使用 PHP 更改文件的标题属性

[英]How to change the Title attribute of a file using PHP

用户使用我的 PHP 应用程序上传 PDF 文件,我将它们存储在 S3 上。 稍后其他用户查看文件,我在他们的浏览器中显示“内联”。

问题是 PDF 的“标题”属性显示在通常会显示网站标题的浏览器选项卡中。 因为是原上传的用户设置的,是随意的,所以需要修改一下。 我该怎么做呢?

我以为 Title 是文件的扩展属性,但是安装了 Ubuntu 的 xattr,当我在文件上运行它时,它什么也不返回,所以也许我错了。

当我在 S3 上查看对象元数据时,没有提到 Title 属性,所以我不知道它在 S3 上的存储位置/方式。

我的偏好是使用操作系统调用重写 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\"'];

(实际上不知道是否需要转义这些引号;如果不需要,请去掉反斜杠。)

问题是要设置标题,标题必须设置到pdf中,但是有一个解决方法(见解释)

说明

具有目标“_blank”属性的页面,根据 url 的最后一部分设置文件名。 因此,如果 url 是 my.site/32/55 ,则 html 标题是 55。

解决方法是将文件名设置为 url 的最后一部分

1) Web.php

这是最重要的部分。 要为页面提供 pdf 标题,请将您想要的标题设置为最后一个参数

Route::get('/pdfSee/{fileID}/{htmlTitle}', 'FileController@viewInTheBrowser')->name('file.see');

2)控制器

public function viewInTheBrowser(File $file){
$basePath = 'public/myFolder/'; 
        return  response()->download(storage_path("app/".$this->basePath. $file->file_system_path), $file->file_name, [], 'inline');
    }

3) 查看

<a href="{{ URL::route('file.see', [$file, $file->file_name]) }}" target="_blank"> Download </a>

如你所见,我们传入路由文件。看到实际文件名作为最后一个参数,所以当html页面打开时,它将最后一个参数(文件名)作为html页面标题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM