好的,所以我尝试了几种获取文件上传到我的S3帐户的方法。终于发现自己到了某处和BOOM - 令人困惑的文档和奇怪的错误信息似乎与自己相矛盾。
好的,首先我不使用作曲家或类似的东西,我这样做是老式的:
require '/path/to/aws-autoload.php';
现在这个加载正确,我已经减少了自动加载只使用Common和S3类 - 不需要所有东西!
接下来我加载S3 Client和Credentials:
use Aws\S3\S3Client;
use Aws\Common\Credentials\Credentials;
现在启动魔法的代码:
$file = '/path/to/' . $filename;
$credentials = new Credentials('KEY', 'SECRET KEY');
$s3 = S3Client::factory(array('credentials' => $credentials));
try{
$s3->putObject(array(
'Bucket' => 'sub.domain.com.s3.amazonaws.com',
'Body' => fopen($file, 'r'),
'ACL' => 'public-read',
));
} catch (S3Exception $e) {
$result = array(
'ok' => false,
'descr' => 'There was an error uploading the file to S3 : ' . $filename
);
}
我似乎遇到的问题是“Bucket”本身。
当我将Bucket格式化为 sub.domain.com 时,我从AWS API返回以下消息:
AWS错误消息:您尝试访问的存储区必须使用指定的端点进行寻址。请将以后的所有请求发送到此端点:“sub.domain.com.s3.amazonaws.com”。
现在当我更改“Bucket”以匹配上述内容时,如下所示: sub.domain.com.s3.amazonaws.com
我收到以下错误消息:
AWS错误消息:指定的存储桶不存在
我做错了吗?缺少什么?遗憾的是,AWS文档并不是最新的。 API目前似乎自相矛盾。我知道所有的密钥都是正确的,并且所有权限都是正确的。它从301 - Redirect变为404 - Not Found from its advice。
任何帮助/建议将不胜感激。我觉得我在这里走了一圈!
答案 0 :(得分:4)
以下是需要仔细检查的一些内容。
S3Client
实例化[..., 'region' => 'us-west-2', ...]
。'Bucket'
参数应设置为您的存储桶的名称(例如,如果您的存储桶名为“sub.domain.com”),则'Bucket'
参数应设置为{{ 1}})。不要在'sub.domain.com'
参数中包含区域或“s3.amazonaws.com”(即bucket!= endpoint)。 SDK会自动确定端点(基于客户端的区域和提供的存储桶名称),并根据需要调整路径样式的URL。'Bucket'
参数,该参数在上面的代码示例中不存在。