Gie*_*ius 5 php amazon-s3 amazon-web-services
我正在尝试生成一个 URL,其他系统可以使用该 URL 将文件上传到我的 S3 存储桶。我查看了文档和类似问题,但是,我找不到正确的解决方案。
我已经尝试以多种方式创建 PreSigned URL($this->s3是 S3Client 的参考):
1:
$signedUrl = $this->s3->getCommand(
'PutObject',
array(
'Bucket' => $this->bucket,
'Key' => 'recording_test.mp3',
'Body' => ''
)
)->createPresignedUrl('+2 hours');
Run Code Online (Sandbox Code Playgroud)
2:
$command = $this->s3->getCommand('PutObject', array('Bucket' => $this->bucket, 'Key' => 'recording_test3.mp3', 'Body' => ''));
$request = $command->prepare();
$signedUrl = $this->s3->createPresignedUrl($request, '+2 hours');
Run Code Online (Sandbox Code Playgroud)
当试图简单地访问 URL 时,我收到以下错误:
The request signature we calculated does not match the signature you provided. Check your key and signing method.
Run Code Online (Sandbox Code Playgroud)
我也试过这样: $key = 'recording_test2.mp3'; $url = $this->bucket.'/'.$key;
$request = $this->s3->put($url);
$signedUrl = $this->s3->createPresignedUrl($request, '+2 hours');
Run Code Online (Sandbox Code Playgroud)
但是,这会生成格式为 的 URL s3.amazonaws.com/bucket/key...,这会产生有关无效端点的错误,并且bucket.s3.amazonaws.com/key...应使用该格式的端点。手动更改 URL 会产生与上述相同的无效签名错误。
我看不出我做错了什么或以任何其他方式生成预签名 URL?
感谢帮助
小智 0
创建签名 URL 时,不应使用密钥Body。生成的签名 URL 包含要上传的正文的签名。然后,当您尝试使用 URL 上传文件时,它无法将您使用的空字符串与文件的内容相匹配。
另外,如果您使用 Curl 来放置文件,我建议使用 \CURLFile,并记住用于curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");您的 PUT 请求。
| 归档时间: |
|
| 查看次数: |
2454 次 |
| 最近记录: |