使用签名算法版本 4 创建签名 S3 下载 link

Create singed S3 download link w/ signature algorithm version 4

我需要 eu-central-1 中存储桶的过期下载链接。

使用来自 SDK 的 $s3->getObjectUrl($bucket, $filename, '+5 minutes');-PHP 我只得到像 http://.../file.txt 这样没有查询字符串的未签名的 URL。

完整代码:

require 'vendor/autoload.php';
use Aws\S3\S3Client;

$client = S3Client::factory([
    'version' => 'latest',
    'region'  => 'eu-central-1',
    'signature'    => 'v4',
    'credentials' => [
        'key'    => 'xxxxx',
        'secret' => 'xxxxx'
    ]
]);

$plainUrl = $client->getObjectUrl('mybucket', 'data.txt');
// > https://my-bucket.s3.amazonaws.com/data.txt

$signedUrl = $client->getObjectUrl('mybucket', 'data.txt', '+10 minutes');
// > https://my-bucket.s3.amazonaws.com/data.txt

不知道为什么?

啊啊啊 getObjectUrl 不再有第三个参数。 这有效:

$cmd = $client->getCommand('GetObject', [
    'Bucket' => $bucket,
    'Key'    => 'test1G.dat'
]);

$request = $client->createPresignedRequest($cmd, '+20 minutes');
$presignedUrl = (string) $request->getUri();