2014-10-07 117 views
3

好吧,所以我尝试了几种获取文件上传到我的S3帐户的方法。最后发现自己到了某个地方和BOOM--令人困惑的文档和奇怪的错误信息似乎与自己相矛盾。AWS PHP SDK将文件上传到S3令人困惑的错误

好了,开始与我没有使用作曲家之类的东西,我这样做的老式方法:正确

require '/path/to/aws-autoload.php'; 

现在这个负荷,我已经下调了自动加载,只使用普通课程和S3课程 - 不需要任何东西!

接下来我加载S3客户端和证书:

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 
    ); 
} 

的问题,我似乎有与“桶”本身。

当我格式化铲斗sub.domain.com我收到以下消息来自AWS API回:

AWS错误信息:使用您尝试访问的桶必须解决的问题指定的端点。请将所有未来请求发送到此端点:“sub.domain.com.s3.amazonaws.com”。

现在,当我改变 '桶' 来匹配上面,像这样:sub.domain.com.s3.amazonaws.com

我收到以下错误信息:

AWS错误消息:指定的存储桶不存在

我做错了什么?有什么缺失?不幸的是,AWS文档并不完整。 API目前似乎是自相矛盾的。我知道所有的密钥都是正确的,并且所有权限都是正确的。它从301 - 重定向到404 - 从自己的建议中找不到。

任何帮助/意见将不胜感激。我觉得我在这里有点圈子!

+0

是不是只是作为一个例子的'sub.domain'部分?我认为你应该将这个价值改变为你首先命名的任何东西。 – Cyclonecode 2014-10-07 09:24:09

+0

我已经这样做了,我在这里发布时将此设置为** sub.domain **,以使其更通用并且不会泄露我工作的网站。此外,** KEY **和** SECRET KEY **被设置为正确的值 – JustSteveKing 2014-10-07 09:27:07

+0

您是否曾尝试使用'http://s3.amazonaws.com/ '''等路径样式的URL来访问您的存储桶? – Cyclonecode 2014-10-07 09:31:31

回答

4

这里有一些事情要仔细检查。

  1. 如果桶是在一定区域(例如,US-西-2),实例化S3Client与该区域[..., 'region' => 'us-west-2', ...]创建。
  2. 'Bucket'参数应该设置为您的存储桶的名称(例如,如果您的存储桶命名为“sub.domain.com”,那么'Bucket'参数应设置为'sub.domain.com')。请勿在'Bucket'参数中包含区域或“s3.amazonaws.com”(即bucket!=端点)。 SDK会自动确定端点(根据客户端的区域和提供的存储桶名称),并根据需要调整路径样式的URL。
  3. PutObject操作需要'Key'参数,该参数在上面的代码示例中不存在。
+0

哇! 1号为我做了,非常感谢,先生! – 2015-01-28 21:33:23