руководство существует для v2 из AWS SDK для PHP для потоковой передачи объектов, таких как изображения, из S3. В этом руководстве он ссылается $command->getResponse()->getHeaders()
— и то и другое getResponse()
а также getHeaders()
кажется, не существует в v3 SDK.
документация для обёртки потока в v3 не ссылается на получение заголовков. Я пробовал родной PHP get_headers()
с s3://
путь, но это возвращает false
(без ошибок). Если я попробую get_headers($fullurl)
Я могу получить заголовки.
Как я могу получить заголовки для объекта, используя потоковый путь s3://
для версии 3 AWS SDK для PHP? Использование полного 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_headers($fullurl)
работает.
Поскольку нам иногда требуется доступ к личным файлам, мы можем получить назначенный URL что даст любому пользователю доступ к 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);
Других решений пока нет …