使用php下载存储在Amazon S3上的文件

时间:2015-01-13 09:24:27

标签: php amazon-web-services amazon-s3 download

我有以下代码成功地将保存在S3上的文件显示到浏览器,但我希望能够将该文件下载到客户端的计算机。

我需要做什么?

$result = S3::getObject($Bucketname,$uri);
header("Content-Type: ".$result->headers['type']);
die($result->body);

我已尝试过以下操作,但它只是下载了一个无法读取的文件......

$result = S3::getObject($Bucketname,$uri);
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=test.pdf');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . strlen($result->body));
ob_clean();
flush();
readfile($result->body);
exit;

2 个答案:

答案 0 :(得分:1)

您可以使用getObjectUrl方法

创建下载网址

像:

$downloadUrl = $s3->getObjectUrl($bucketname, $file, '+5 minutes', array(
                'ResponseContentDisposition' => 'attachment; filename=$file,'Content-Type' => 'application/octet-stream',
        ));

并将该url传递给用户。这会将用户引导到将启动文件下载的amzon页面(该链接将有效5分钟 - 但您可以更改它)

另一个选项是,首先将该文件保存到您的服务器,然后让用户从您的服务器下载该文件

答案 1 :(得分:0)

您正在尝试将PDF格式下载为二进制内容类型数据。

使用getObject请求的响应来获取正确的mime类型:

$result = S3::getObject($Bucketname,$uri);
header('Content-Description: File Transfer');
header('Content-Type: ' . $result['ContentType']);
header('Content-Disposition: attachment; filename=test.pdf');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . strlen($result->body));
ob_clean();
flush();
readfile($result->body);
exit;