AWS PHP SDK将文件上载到S3时出错
好的,所以我尝试了几种方法来获取一个文件上传到我的S3帐户。最后,我发现自己有了进展,出现了混乱的文档和奇怪的错误信息,这些信息似乎自相矛盾 好的,首先,我没有使用composer或类似的东西,我是用老式的方式来做的:AWS PHP SDK将文件上载到S3时出错,php,amazon-web-services,amazon-s3,aws-php-sdk,Php,Amazon Web Services,Amazon S3,Aws Php Sdk,好的,所以我尝试了几种方法来获取一个文件上传到我的S3帐户。最后,我发现自己有了进展,出现了混乱的文档和奇怪的错误信息,这些信息似乎自相矛盾 好的,首先,我没有使用composer或类似的东西,我是用老式的方式来做的: require '/path/to/aws-autoload.php'; 现在这个加载正确了,我已经减少了自动加载,只使用普通类和S3类-不需要所有东西 接下来,我加载S3客户端和凭据: use Aws\S3\S3Client; use Aws\Common\Credentia
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
);
}
我似乎遇到的问题是“桶”本身
当我将Bucket格式化为sub.domain.com时,我从AWS API返回以下消息:
AWS错误消息:您试图访问的存储桶必须使用指定的端点寻址。请将所有未来的请求发送到此端点:“sub.domain.com.s3.amazonaws.com”
现在,当我更改“Bucket”以匹配上面的内容时,如下所示:sub.domain.com.s3.amazonaws.com
我收到以下错误消息:
AWS错误消息:指定的存储桶不存在
我做错什么了吗?少了什么吗?不幸的是,AWS文档并不完全符合要求。API目前似乎自相矛盾。我知道所有的密钥都是正确的,所有的权限都是正确的。它从301-重定向到404-根据自己的建议找不到
如有任何帮助/建议,将不胜感激。我觉得我在这里有点绕圈子了 这里有一些东西需要仔细检查
S3Client
,“region”=>“us-west-2”,…]'Bucket'
参数应设置为Bucket的确切名称(例如,如果Bucket的名称为“sub.domain.com”,则'Bucket'
参数应设置为'sub.domain.com'
)。不要将区域或“s3.amazonaws.com”包含在'Bucket'
参数中(即Bucket!=端点)。SDK自动确定端点(基于客户端的区域和提供的bucket名称),并根据需要调整路径样式的URL“Key”
参数,该参数在上面的代码示例中不存在不仅仅是
子域
部分用作示例吗?我认为你应该把这个值改成你最初命名的bucket。我已经这样做了,我在这里发布时将它设置为sub.domain,使它更通用,而不是泄露我工作的网站。此外,密钥和私钥设置为正确的值。如果您尝试使用路径样式的URL访问存储桶,如http://s3.amazonaws.com/
?是的,结果相同:PermanentRedirect
必须使用指定的端点对您尝试访问的存储桶进行寻址。请将所有未来的请求发送到此endpoint.sub.domain.comsub.domain.com.s3.amazonaws.com
尝试使用php s3客户端进行检查,以便您的bucket名称对s3 bucket有效,isValidBucketName($bucketName)代码>,我想问题可能是bucket名称的格式。