gpt4 book ai didi

php - 使用 Laravel 从 Amazon S3 下载文件

转载 作者:可可西里 更新时间:2023-11-01 13:34:24 32 4
gpt4 key购买 nike

我有点确定如何使用 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;

上面的方法有效,但我坚持在本地保存文件。如何通过 Response::download() 正确使用 S3 的结果?

谢谢!

编辑:我发现我可以使用 $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() method允许您指定 S3 在发送响应时应使用的 header 。 getObjectUrl() method使用 GetObject 操作生成 URL,并且可以在其最后一个参数中接受任何有效的 GetObject 参数。通过执行以下操作,您应该能够使用预签名的 URL 使用所需的 header 直接从 S3 到用户下载:

$downloadUrl = $s3->getObjectUrl($bucket, 'data.txt', '+5 minutes', array(
'ResponseContentDisposition' => 'attachment; filename="' . $fileName . '"',
));

如果你想从你的服务器流式传输一个 S3 对象,那么你应该查看 Streaming Amazon S3 Objects From a Web Server关于 AWS 开发人员指南的文章

关于php - 使用 Laravel 从 Amazon S3 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18839216/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com