提问者:小点点

使用AWS SDK(PHP)更改生成的S3链接的基本URL


我想创建预签名的S3 URL:https://docs.aws.amazon.com/aws-sdk-php/v3/guide/service/s3-presigned-url.html

我的代码与URL中提到的示例非常相似:

$sdk = new Aws\Sdk( [
    'region' => 'eu-west-2',
    'version' => 'latest',
] );

$s3Client = $sdk->createS3();

$cmd = $s3Client->getCommand('GetObject', [
    'Bucket' => 'books.com',
    'Key'    => 'testKey'
]);

$request = $s3Client->createPresignedRequest($cmd, '+20 minutes');

// Get the actual presigned-url
$presignedUrl = (string) $request->getUri();

上面生成的URL如下所示:

https://s3.eu-west-2.amazonaws.com/books.com/testkey?x-amz-content-sha256=....

这是意料之中的。但是,我的S3 bucket具有静态网站托管,并且我使用CNAME记录,允许我使用不同的基本URL。

因此,我希望使用以下URL:

http://books.com/my-bucket/testkey?x-amz-content-sha256=....

我怎么能这么做?


共1个答案

匿名用户

您可以将端点设置为bucket域名:

$sdk = new Aws\Sdk( [
    'region' => 'eu-west-2',
    'version' => 'latest',
    'endpoint' => 'http://books.com',
    'bucket_endpoint' => true
] );

这将生成如下所示的签名URL:

http://books.com/testkey?x-amz-content-sha256=unsigned-payload&x-amz-algorithm=aws4-hmac-sha256&x-amz-credential=akiai2v4lxxxxxxxxxxxxxxx%2f20171116%2feu-west-2%2fs3%2faws4_request&x-amz-date=20171116t191003z&x-amz-signedheaders=host&x-amz-expires=1200