我正在将文件从php上传到AWS s3。我已经成功上传了文件。
它返回的网址是=> https://BUCKETNAME.s3.ap-south-1.amazonaws.com/images1740/1550830121572.jpg
实际网址为=> https://s3.ap-south-1.amazonaws.com/BUCKETNAME/images1740/1550830121572.jpg (存储桶名称以url开头而不是开头)
因此,加载图像时出现错误=>“找不到指定的密钥”
$source = $source;
$bucket = 'xxxxxxxxxxxxxxxxx';
$keyname = 'images'.$usr_id."/".$name;
// for push
$s3 = S3Client::factory(
array(
'credentials' => array(
'key' => "xxxxxxxxxxxxxx",
'secret' => "xxxxxxxxxxxxxxx"
),
'version' => 'latest',
'region' => 'ap-south-1'
)
);
try {
// Upload data.
$result = $s3->putObject(array(
'Bucket' => $bucket,
'Key' => $keyname,
'SourceFile' => $source,
'ServerSideEncryption' => 'AES256',
));
// Print the URL to the object.
print_r($result);
return $result['ObjectURL'] . PHP_EOL;
// print_r($result);
} catch (S3Exception $e) {
echo $e->getMessage() . PHP_EOL;
}
答案 0 :(得分:1)
在初始化S3客户端时将use_path_style_endpoint
设置为true,以在构建对象URL时默认使用S3路径样式端点。 1
如果存储桶名称为有效域名,则实现详细信息的对象URL将采用路径样式,否则,将回退到S3路径样式。
您想一直保持以后的行为。
$s3 = S3Client::factory(
array(
'credentials' => array(
'key' => "xxxxxxxxxxxxxx",
'secret' => "xxxxxxxxxxxxxxx"
),
'use_path_style_endpoint' => true,
'version' => 'latest',
'region' => 'ap-south-1'
)
);
如果要一次性禁用PutObject操作,也可以执行以下操作。
$result = $s3->putObject(array(
'Bucket' => $bucket,
'Key' => $keyname,
'SourceFile' => $source,
'ServerSideEncryption' => 'AES256',
'@use_path_style_endpoint' => true
));