【发布时间】:2020-07-05 11:01:54
【问题描述】:
我对使用 AWS 非常陌生,我正在研究 AWS 提供的使用 putObject 的示例,在此处找到 https://docs.aws.amazon.com/AmazonS3/latest/dev/UploadObjSingleOpPHP.html
此时我只想使用示例中的 AWS 开发工具包将任何对象上传到我的 S3 存储桶,但我收到一条错误消息,提示 400 Bad Request(完整输出如下)。我试图写入的存储桶故意不公开,因为我不希望整个存储桶都可以访问。我不确定这是否是问题,但如果是,我不确定如何授予我的代码访问权限以写入存储桶,并且文档没有相关示例。如果这不是问题,那么我不确定还有什么问题。
我已经编辑了我的 php 以包含我尝试访问的存储桶和我自己的键名,我的理解应该是上传对象后要使用的文件名。我不断收到此错误:
错误输出:
执行“PutObject”时出错 "https://frank-transcribe-mediaconvert.s3.amazonaws.com/032420-test-upload.txt"; AWS HTTP 错误:客户端错误:
PUT https://frank-transcribe-mediaconvert.s3.amazonaws.com/032420-test-upload.txt导致400 Bad Request响应:InvalidTokenThe provided 令牌格式错误或其他(截断...) InvalidToken(客户端): 提供的令牌格式错误或无效。 - InvalidTokenThe 提供的令牌格式错误或无效。
这是我的 php 代码:
<?php
require 'vendor/autoload.php';
use Aws\Sts\StsClient;
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
$bucket = 'frank-transcribe-mediaconvert';
$keyname = date('mdy') . '-test-upload.txt';
$s3 = new S3Client([
'version' => 'latest',
'region' => 'us-east-1'
]);
try {
// Upload data.
$result = $s3->putObject([
'Bucket' => $bucket,
'Key' => $keyname,
'Body' => 'Hello, world!',
'ACL' => 'public-read'
]);
// Print the URL to the object.
echo $result['ObjectURL'] . PHP_EOL;
} catch (S3Exception $e) {
echo $e->getMessage() . PHP_EOL;
}
?>
【问题讨论】:
标签: php amazon-s3 aws-sdk aws-cli aws-php-sdk