如何使用 php 和 Amazon S3 sdk 下载文件?
我正在尝试使我的脚本能够通过 php 在 Amazon S3 存储桶中显示 test.jpg。 这是我到目前为止所得到的:
require_once('library/AWS/sdk.class.php');
$s3 = new AmazonS3($key, $secret);
$objInfo = $s3->get_object_headers('my_bucket', 'test.jpg');
$obj = $s3->get_object('my_bucket', 'test.jpg', array('headers' => array('content-disposition' => $objInfo->header['_info']['content_type'])));
echo $obj->body;
这只是转储页面上的文件数据。我认为我还需要发送内容处置标头,我认为这是在 get_object() 方法中完成的,但事实并非如此。
注意:我使用的是此处提供的 SDK:http://aws.amazon.com/sdkforphp/
I'm trying to make it so that my script will show test.jpg in an Amazon S3 bucket through php.
Here's what I have so far:
require_once('library/AWS/sdk.class.php');
$s3 = new AmazonS3($key, $secret);
$objInfo = $s3->get_object_headers('my_bucket', 'test.jpg');
$obj = $s3->get_object('my_bucket', 'test.jpg', array('headers' => array('content-disposition' => $objInfo->header['_info']['content_type'])));
echo $obj->body;
This just dumps out the file data on the page. I think I need to also send the content-disposition header, which I thought was being done in the get_object() method, but it isn't.
Note: I'm using the SDK available here: http://aws.amazon.com/sdkforphp/
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
这两种方法都对我有用。第一种方式看起来更简洁。
或者是更冗长但仍然实用的方式。
Both of these methods work for me. The first way seems more concise.
Or a more wordy but still functional way.
在回显 $object 主体之前,通过回显内容类型标头来使其工作。
Got it to work by echo'ing out the content-type header before echo'ing the $object body.
对于 PHP sdk3 更改 Maximus 答案的最后一行
For PHP sdk3 change the last line of Maximus answer
如果您仍在寻找 2019 年以后的相关答案,使用适用于 PHP 3.x 的 AWS SDK,特别是使用 Composer 的“2006-03-01”,以下内容对我有用
注意:这是为那些想要的人提供的解决方案以避免使用来自 AWS 的直接下载链接通过其服务器代理下载可能出现的问题。
If you're still looking for a relevant answer in 2019+, With AWS SDK for PHP 3.x and specifically '2006-03-01' with composer, the following worked for me
NOTE: This is a solution for those who would want to avoid the issues that may arise from proxying the download through their servers by using a direct download link from AWS.
我将 Content-Disposition 标头添加到 getAuthenticatedUrl();
I added the Content-Disposition header to the getAuthenticatedUrl();
此脚本下载 S3 服务(例如 Amazon S3 或 DigitalOcean 空间)上所有目录中的所有文件。
composer require aws/aws-sdk-php
php index.php在控制台中运行 php
并让它撕裂!请注意,我只是编写代码来完成工作,这样我就可以关闭我的 DO 帐户。它可以满足我的需要,但我可以进行一些改进以使其更具可扩展性。享受!
This script downloads all files in all directories on an S3 service, such as Amazon S3 or DigitalOcean spaces.
composer require aws/aws-sdk-php
php index.php
in a console and let it rip!Please note that I just wrote code to get the job done so I can close down my DO account. It does what I need it to, but there are several improvements I could have made to make it more extendable. Enjoy!