guide exists for v2的AWS SDK for PHP来自S3的流对象,如图像。在该指南中,它引用了$command->getResponse()->getHeaders()
- SDK中v3似乎不存在getResponse()
和getHeaders()
。
documentation for the stream wrapper in v3未提及检索标头。我已尝试使用s3://
路径的原生PHP get_headers()
,但返回false
(无错误)。如果我尝试get_headers($fullurl)
,我就可以检索标题。
如何使用AWS SDK for PHP版本3的流路径s3://
检索对象的标头?使用完整的URL将适用于我有私人文件的情况。
运行文档引用的一些其他本机PHP函数,使用s3://
路径正确返回值。可能会对标题进行SDK方法调用,我无法找到它。
$s3->registerStreamWrapper();
$headers = get_headers('s3://my-files/' . $filepath);
//$headers === false
$headers = get_headers('http://my-files.s3.amazonaws.com/' . $filepath);
//$headers correctly retrieves all the headers
答案 0 :(得分:0)
一种解决方案似乎不是最有效的方式,但它有效 - 它可以解决get_headers($fullurl)
工作的问题。
由于我们有时需要访问私有文件,因此get a presigned URL可以为任何用户提供访问权限,并运行get_headers()
。
$s3getobject = $s3->getCommand('GetObject', [
'Bucket' => 'my-files',
'Key' => $filepath
]);
$presignedrequest = $s3->createPresignedRequest($s3getobject, '+5 minutes');
$s3url = (string) $presignedrequest->getUri();
$headers = get_headers($s3url, true);
答案 1 :(得分:0)
v2代码:
$command = $s3->getCommand('HeadObject', [
'Bucket' => $bucket,
'Key' => $key,
]);
$headers = $command->getResponse()->getHeaders();
v3代码:
$command = $s3->getCommand('HeadObject', [
'Bucket' => $bucket,
'Key' => $key,
]);
$result = $s3->execute($command);
$headers = $result->get("@metadata")['headers'];
这不是一个直接的替代品。数组键现在是小写字母,因此您必须将诸如$headers['Last-Modified']
的引用转换为$headers['last-modified']
我在文档中找不到此内容。我看到了使用execute / results的示例,因此我运行echo $result
来查看新结构并看到了@metadata
。看起来像这样:
{
.........
"@metadata": {
"statusCode": 200,
"effectiveUri": "https:\/\/example.s3.amazonaws.com\/example\/file.txt",
"headers": {
"x-amz-id-2": "",
"x-amz-request-id": "",
"date": "Tue, 15 Oct 2019 20:04:18 GMT",
"x-amz-replication-status": "COMPLETED",
"last-modified": "Tue, 15 Oct 2019 19:08:28 GMT",
"etag": "",
"x-amz-server-side-encryption": "AES256",
"x-amz-version-id": "",
"accept-ranges": "bytes",
"content-type": "application\/octet-stream",
"content-length": "32213",
"server": "AmazonS3"
},
"transferStats": {
"http": [[]]
}
}
}