我目前正在使用AWS S3创建系统,我的客户端需要为其系统签名的URL。但是我目前在设置签名URL的虚拟主机时遇到了麻烦。
在以下代码运行$source=http://media.example.com/object-key
和$host=media.example.com
$host = get_option('dn-s3-host');
if (strpos($host,'http://') === FALSE) $host = 'http://' . $host;
if (strpos($source,get_option('dn-s3-host')) !== FALSE) {
$s3Client = new Aws\S3\S3Client(array(
'version' => 'latest',
'region' => get_option('dn-s3-region'),
'endpoint' => $host,
'use_path_style_endpoint' => true,
'force_path_style' => true,
'credentials' => array(
// 'region' => get_option('dn-s3-region'),
'key'=>get_option('dn-s3-key'),
'secret'=>get_option('dn-s3-secret')
)
));
$source = str_replace('http://','',$source);
$source = ltrim(str_replace(get_option('dn-s3-host'),'',$source),'/');
$cmd = $s3Client->getCommand('GetObject',array(
'Bucket'=>get_option('dn-s3-bucket'),
'Key'=>$source
));
$request = $s3Client->createPresignedRequest($cmd,'+2 hours');
$source = (string) $request->getUri();
}
}
当此代码运行时,我收到此错误:
<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
<Key>bucket/object-key</Key>
<RequestId>363C44A299AA1E88</RequestId>
<HostId>
aCUab3+AD6396dJRMX8rCfYDl9EMjEBDn9somLQa3Ii6Bm6GoJGHT+f/qSZGprcR+3iG/hXC3EQ=
</HostId>
</Error>
我的虚拟主机media.example.com
是指向bucket.s3.amazonaws.com的CNAME记录
如果我访问http://media.example.com/object-key
,我会正确获取该文件。如何为签名URL设置此虚拟主机?
答案 0 :(得分:0)
如果您的签名网址无效,您将收到如下错误
<Error>
<Code>MissingKey</Code>
<Message>
Missing Key-Pair-Id query parameter or cookie value
</Message>
</Error>
错误表示该对象不存在。
根据错误消息
<Key>bucket/object-key</Key>
看起来你的网址中有两次重复的存储桶。
尝试打印实际签名的网址并检查网址是什么样的,这样可以了解您在那里犯了什么错误。
希望它有所帮助。