使用AWS SDK for PHP(v3)检索流对象的标题
从S3流式处理对象(如图像)的方法。在该指南中,它引用了使用AWS SDK for PHP(v3)检索流对象的标题,php,amazon-s3,http-headers,aws-sdk,aws-php-sdk,Php,Amazon S3,Http Headers,Aws Sdk,Aws Php Sdk,从S3流式处理对象(如图像)的方法。在该指南中,它引用了$command->getResponse()->getHeaders()。getResponse()和getHeaders()似乎都不存在于SDK的v3中 未引用检索标题。我用s3://路径尝试了本机PHP,但返回false(无错误)。如果我尝试获取标题($fullurl),我就能够检索标题 如何使用AWS SDK for PHP版本3的流路径s3://检索对象的标题?在我有私人文件的情况下,使用完整的URL是可行的 运行文档引用的其他一
$command->getResponse()->getHeaders()
。getResponse()
和getHeaders()
似乎都不存在于SDK的v3中
未引用检索标题。我用s3://
路径尝试了本机PHP,但返回false
(无错误)。如果我尝试获取标题($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
有一种解决方案似乎不是最有效的方法,但它是有效的——它的工作原理是
get\u headers($fullurl)
有效
因为我们有时需要访问私有文件,所以我们可以为任何具有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);
v2代码:
$command = $s3->getCommand('HeadObject', [
'Bucket' => $bucket,
'Key' => $key,
]);
$headers = $command->getResponse()->getHeaders();
$command = $s3->getCommand('HeadObject', [
'Bucket' => $bucket,
'Key' => $key,
]);
$result = $s3->execute($command);
$headers = $result->get("@metadata")['headers'];
v3代码:
$command = $s3->getCommand('HeadObject', [
'Bucket' => $bucket,
'Key' => $key,
]);
$headers = $command->getResponse()->getHeaders();
$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": [[]]
}
}
}
$headers=get_headers($s3url,true)
不会获取所有信息,如内容类型。