如何使用适用于 PHP 的 Amazon 开发工具包强制从 Amazon S3 下载文件


How do you force a file to download from Amazon S3 using the Amazon SDK for PHP?

我有一个使用 Amazon S3 存储文件的应用程序。 我遇到了一个问题,即大型PDF未使用chrome下载。 较小的 PDF 效果很好,但较大的 PDF 不起作用。 我不认为这是PDF的问题,我怀疑这与文件的大小有关。

在浏览器中查看文件时,这是我使用的代码:

header("Content-type: $filetype");
header("Content-Disposition: filename='"".$filename."'"");
$response = $s3->get_object(AMAZON_BUCKET, $filepath);   
echo $response->body;

这适用于较小的文件,但是今天我遇到了一个问题,即无法显示此大PDF文件。 我认为文件太大而无法渲染。因此,如果文件太大,我决定尝试强制下载文件而不是在浏览器中查看文件。所以这是我试图开始工作的代码,但我一定做错了什么,因为它不起作用。

    $response = $s3->get_object(AMAZON_BUCKET, $filepath, array(
      'response' => array(
        'content-type' => $filetype,
        'content-disposition' => 'attachment'
       )
    ));

如何使用适用于 PHP 的亚马逊开发工具包强制下载文件?

您的方法的问题在于您将整个文件从 S3 下载到网络服务器的内存中,然后将其发送到用户的浏览器。如果文件很大,这可能会导致超过 memory_limit 甚至max_execution_time 。(诚然,我不知道为什么你的情况是特定于Chrome的。

一种更优雅的方法是重定向用户直接从 S3 下载文件。您甚至可以将自定义标头设置为请求的一部分,以便可以强制下载对话框。使用 get_object_url() 而不是 get_object()