Я поддерживаю проект, который хранит файлы в S3 и использует локальную файловую систему в качестве резерва для локальной разработки. Хорошо это или плохо, но он надежно работает уже 9 лет.
Я хочу добавить эмулятор S3 для разработки тегов. Я попробовал несколько утилит (S3 Ninja, S3Mock и LocalStack, а также еще несколько, которые мне не удалось даже запустить), но ни одна не сработала. Независимо от программного обеспечения, ошибка всегда заключается в том, что сегмент не может быть найден, что заставляет меня задуматься, не есть ли что-то не так в нашей кодовой базе.
Мы используем AWS SDK для PHP, и ошибка всегда одна и та же:
/** @var \Aws\S3\S3Client $s3Client */
$s3Client->upload($bucket, $filePath, $content, $privacy, [
'params' => [
'Metadata' => [
'Content-Disposition' => 'attachment; filename="' . $fileFullName . '"',
],
'ChecksumAlgorithm' => 'SHA256',
],
]);
Ошибка выполнения «PutObject» на «http://customer-artifacts.localhost:999 ... f81740.png»; Ошибка HTTP AWS:
NoSuchBucket (клиент): указанный сегмент не существует
У меня такое впечатление, что сервер S3 ожидает этот формат:
http://localhost:9999/customer-artifact ... /some-path
Если да, то почему в нашей реализации используется этот другой формат и почему он работает в рабочей среде с реальным AWS S3?
http://customer-artifacts.localhost:9999/some-path
Подробнее: https://stackoverflow.com/questions/799 ... k-requests