我对如何使用Laravel 4从Amazon S3启动文件下载有一点确定。我正在使用AWS
$result = $s3->getObject(array(
'Bucket' => $bucket,
'Key' => 'data.txt',
));
// temp file
$file = tempnam('../uploads', 'download_');
file_put_contents($file, $result['Body']);
$response = Response::download($file, 'test-file.txt');
//unlink($file);
return $response;
上面的作品,但我坚持本地保存文件。如何正确使用S3的结果Response::download()
?
谢谢!
编辑:我发现我可以$s3->getObjectUrl($bucket, $file, $expiration)
用来生成访问URL。这可能有效,但仍不能完全解决上述问题。
编辑2:
$result = $s3->getObject(array(
'Bucket' => $bucket,
'Key' => 'data.txt',
));
header('Content-type: ' . $result['ContentType']);
header('Content-Disposition: attachment; filename="' . $fileName . '"');
header('Content-length:' . $result['ContentLength']);
echo $result['Body'];
仍然不认为这是理想的吗?
该S3Client::getObject()
方法允许您指定S3发送响应时应使用的标头。该getObjectUrl()
方法使用GetObject操作生成URL,并且可以在其最后一个参数中接受任何有效的GetObject参数。通过执行以下操作,您应该能够使用预签名的URL使用所需的标头直接进行S3至用户下载:
$downloadUrl = $s3->getObjectUrl($bucket, 'data.txt', '+5 minutes', array(
'ResponseContentDisposition' => 'attachment; filename="' . $fileName . '"',
));
如果要从服务器流式传输S3对象,则应查阅《 AWS开发人员指南》中的“从Web服务器流式传输Amazon S3对象”一文。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句