Итак, я попробовал несколько способов загрузить файл в свою учетную запись 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
);
}
Проблема, с которой я столкнулся, связана с самим «Ведром».
Когда я форматирую Bucket как sub.domain.com, я получаю следующее сообщение от AWS API:
Сообщение об ошибке AWS: адрес корзины, к которой вы пытаетесь получить доступ, должен быть указан с использованием указанной конечной точки. Пожалуйста, отправляйте все будущие запросы на эту конечную точку: «sub.domain.com.s3.amazonaws.com».
Теперь, когда я изменяю «Корзину», чтобы она соответствовала приведенному выше: sub.domain.com.s3.amazonaws.com
Я получаю следующее сообщение об ошибке:
Сообщение об ошибке AWS: указанный сегмент не существует
Я делаю что-то неправильно? Чего-то не хватает? К сожалению, документация AWS не совсем актуальна. В данный момент API, кажется, противоречит сам себе. Я знаю, что все ключи правильные, и все разрешения правильные. Он перешел с 301 - перенаправление на 404 - не найдено по собственному совету.
Любая помощь/совет будет принята с благодарностью. Мне кажется, что я немного хожу по кругу!
sub.domain
в качестве примера? Я думаю, вы должны изменить это значение на то, что вы назвали своим ведром в первую очередь. - person Cyclonecode   schedule 07.10.2014path-style URL
, напримерhttp://s3.amazonaws.com/<bucket>
? - person Cyclonecode   schedule 07.10.2014<Error><Code>PermanentRedirect</Code><Message>The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.</Message><Bucket>sub.domain.com</Bucket><Endpoint>sub.domain.com.s3.amazonaws.com</Endpoint></Error>
- person JustSteveKing   schedule 07.10.2014bucket.us-west-2.s3.amazoneaws.com
болееbucket.us-east-1.s3.amazoneaws.com
- person Cyclonecode   schedule 07.10.2014isValidBucketName($bucketName);
, я думаю, что проблема может быть в формате имени ведра. - person Cyclonecode   schedule 07.10.2014