веб-сервисы amazon — AWS PHP SDK загружает файл на S3 из-за ошибок

Итак, я попробовал несколько способов получить файл для загрузки на мою учетную запись S3. Наконец-то я оказался где-то и БУМ — запутанная документация и странные сообщения об ошибках, которые кажутся противоречащими друг другу

Хорошо, для начала я не использую композитор или что-то подобное, я делаю это по старинке:

require '/path/to/aws-autoload.php';

Теперь он загружается правильно, и я сократил автозагрузку, чтобы использовать только классы Common и S3 — не нужно все!

Далее я загружаю клиент S3 и учетные данные:

use Aws\S3\S3Client;
use Aws\Common\Credentials\Credentials;

Теперь код для начала волшебства происходит:

$file = '/path/to/' . $filename;
$credentials = new Credentials('KEY', 'SECRET KEY');
$s3 = S3Client::factory(array('credentials' => $credentials));

try{
$s3->putObject(array(
'Bucket' => 'sub.domain.com.s3.amazonaws.com',
'Body'   => fopen($file, 'r'),
'ACL'    => 'public-read',
));
} catch (S3Exception $e) {
$result = array(
'ok' => false,
'descr' => 'There was an error uploading the file to S3 : ' . $filename
);
}

Кажется, у меня проблема с самим «Ковшом».

Когда я форматирую ведро как sub.domain.com Я получаю следующее сообщение от API AWS:

Сообщение об ошибке AWS: адрес, к которому вы пытаетесь получить доступ, должен быть адресован с использованием указанной конечной точки. Пожалуйста, отправляйте все будущие запросы этой конечной точке: «sub.domain.com.s3.amazonaws.com».

Теперь, когда я изменяю ‘Bucket’, чтобы соответствовать вышеуказанному, вот так: sub.domain.com.s3.amazonaws.com

Я получаю следующее сообщение об ошибке:

Сообщение об ошибке AWS: указанный сегмент не существует

Я делаю что-то неправильно? Чего-то не хватает? К сожалению, документация AWS не совсем в порядке. Похоже, что API сейчас противоречит самому себе. Я знаю, что все ключи правильные, и все разрешения правильные. Он перешел с 301 — Перенаправление на 404 — Не найдено по собственному совету.

Любая помощь / совет будет принята с благодарностью. Я чувствую, что я иду по кругу немного здесь!

3

Решение

Вот некоторые вещи, которые нужно перепроверить.

  1. Если контейнер был создан в определенном регионе (например, us-west-2), создайте экземпляр S3Client с этим регионом [..., 'region' => 'us-west-2', ...],
  2. 'Bucket' Параметр должен быть точно указан как ваш контейнер (например, если ваш контейнер называется «sub.domain.com», то 'Bucket' параметр должен быть установлен в 'sub.domain.com'). Не включайте регион или «s3.amazonaws.com» в 'Bucket' параметр (т. е. ведро! = конечная точка). SDK автоматически определяет конечную точку (на основе региона клиента и предоставленного имени сегмента) и при необходимости корректирует URL-адрес для стиля пути.
  3. PutObject операция требует 'Key' параметр, которого нет в приведенном выше примере кода.
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]