我有以下代码成功地将保存在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;
答案 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;