Я пытаюсь загрузить объект из AWS S3, используя SDK для PHP.
$filename = "filename with spaces in it.jpg";
$src = "path/from/bucket-root/".$filename;
$result = S3Client->getObject([
'Bucket' => 'my-bucket-name',
'Key' => $src
]);
Когда я запускаю это, я получаю сообщение об ошибке:
Error executing "GetObject" ... GET filename%20with%20spaces%20in%20it.jpg resulted in a 404 Not Found response:
Клиент S3 кодирует пробелы, но затем не может разрешить путь.
Я пробовал все следующее:
$filename = urlencode("filename with spaces in it.jpg");
$filename = urldecode("filename with spaces in it.jpg");
$filename = addslashes("filename with spaces in it.jpg");
$filename = str_replace(' ','+',"filename with spaces in it.jpg");
И несколько комбинаций — я просто кидаю в стену какашки.
Мой путь к ключу и имя / маршрут сегмента верны, так как я могу успешно получить объект без пробелов в имени файла.
Как мне получить этот объект с пробелами в имени файла?
Это на самом деле работает без замены пробелов чем-либо, вот рабочий код
<?php
require 'aws/aws-autoloader.php';
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
$bucket = 'avitest29oct2018';
$keyname = 'hello there.txt';
$s3 = new S3Client([
'version' => 'latest',
'region' => 'us-west-2',
'credentials' => false
]);
try {
// Get the object.
$result = $s3->getObject([
'Bucket' => $bucket,
'Key' => $keyname
]);
// Display the object in the browser.
header("Content-Type: {$result['ContentType']}");
echo $result['Body'];
} catch (S3Exception $e) {
echo $e->getMessage() . PHP_EOL;
}
?>
Заметка: —
Не уверен, что он связан с используемым вами aws sdk, есть несколько способов установить aws sdk для php, как вы его установили? я использовал 3-й метод (используя почтовый файл)
Других решений пока нет …