1

我有一个使用 Amazon S3 存储文件的应用程序。我遇到了一个问题,即没有使用 chrome 下载大型 PDF。较小的 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'
       )
    ));

如何使用 Amazon SDK for PHP 强制下载文件?

4

1 回答 1

1

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

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

于 2012-05-24T08:52:21.583 回答