【发布时间】:2020-06-03 15:42:57
【问题描述】:
我有一个在浏览器中显示 pdf 文档的源 URL。它应该自动下载。
示例网址:http://doc.local.com/storage/temporary/2020-02-19/c3e175b4706492be8c0d90e497c86ea7/test.pdf
正是我想实现 amazon s3 临时 url 的工作方式(他们在 url 中添加了所有标题)
response-content-disposition=attachment
请不要建议我使用以下代码,因为前端需要一个 URL
header("Content-Length: " . filesize($file));
header("Content-Type: application/octet-stream;");
readfile($file);
【问题讨论】:
-
您当前的代码是什么?请添加您的控制器代码。
-
如果您希望 .pdf 文件的直接 URL 在用户访问它时返回相关标头,这将是您必须在您的网络服务器中配置的内容,与 PHP 无关 -因为正如您已经明确指出的那样,PHP 的责任只是返回正确的 URL,而不是文件本身。下载操作在浏览器和网络服务器之间完成,无需执行任何 PHP 脚本。 (注意,即使那样,设置此标头也只是向用户的浏览器指示如何处理文件 - 它没有义务遵守。)
-
这个过程涉及到几个类。因此,为您提供 url 是如何生成的。 $filePath = 'temporary/2020-02-19/aaaaa/test.pdf' return Storage::disk($disk)->url($filePath);
-
@AlbertRaj 您应该在处理文件下载时添加标题,而不是在生成 URL 时。向我们展示处理文件响应的代码。
-
生成 URL 的方式无关紧要。 URL 不包含标题。 HTTP 响应包含标头。当用户实际访问文件的 URL 时,需要将 content-disposition 标头发送到服务器 - 即下载实际发生的那一刻(而不是当您向他们提供 URL 时......这是一个单独的响应)。由于您的示例 URL 以
.pdf结尾,我假设这是到文件的直接链接,由网络服务器直接提供。那是对的吗?如果是这样,那么正如我所说,您无法通过在 PHP 中执行任何操作来更改它返回的标头。
标签: php laravel local-storage php-7