1

I have an app that is using the Amazon S3 for storing files. I ran into a problem where a large PDF was not downloading using chrome. Smaller PDFs work great, but this larger would not work. I don't believe it is an issue with the PDF, I suspect that it has to do with the size of the file.

When viewing the file in the browser here is the code I am using:

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

This works great for smaller files, but today I ran into a problem where this large PDF would not show. I am thinking the file is too big to be rendered. Therefore I decided to try to force files to be downloaded instead of viewed in the browser if they are too big. So here is the code I am trying to get to work, but I must be doing something wrong because it is not working.

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

How do I use the Amazon SDK for PHP to force a large file to download?

4

1 に答える 1

1

あなたのアプローチの問題は、ファイル全体を S3 から Web サーバーのメモリにダウンロードしてから、ユーザーのブラウザーに送信することです。ファイルが大きい場合、これmemory_limitによりmax_execution_time. (確かに、なぜあなたのケースがChrome固有のものなのかわかりません..)

より洗練された方法は、S3 から直接ファイルをダウンロードするようにユーザーをリダイレクトすることです。カスタム ヘッダーをリクエストの一部として設定することもできるため、ダウンロード ダイアログを強制的に表示できます。get_object_url()の代わりに使用しget_object()ます。

于 2012-05-24T08:52:21.583 に答える