Я не могу сделать прямую загрузку (javascript XHR) на своем ведро S3 из-за системы блокировки CORS. Я использую PHP для создания прямой ссылки на загрузку, с политикой загрузки и S3 подписью:Amazon S3 Прямая загрузка: ошибка CORS
{"key": "501/source/${filename}", "AWSAccessKeyId": "AKIAIIG**********", "acl": "private","policy": "ey JleHBpcmF0aW***************", "signature": "j2UnJRfj+uC+FazEF+wPnuJpdcs=", "success_action_status": "201"}
Но когда я пытаюсь загрузить файл в генерируемую ссылку, я получаю следующее сообщение об ошибке от Firefox:
Запрос заблокирован: политика одного и того же происхождения запрещает читать удаленный ресурс по адресу https://my.bucket.s3.amazonaws.com. Это можно исправить , переместив ресурс в тот же домен или включив CORS.
Мой ведро правильно настроен с политикой CORS, чтобы POST отовсюду:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Что еще я должен делать?
Вот PHP код я использую для создания политики & S3 подписи:
$key = '42/source/';
$policy = json_encode(array(
'expiration' => date('Y-m-d\TG:i:s\Z', strtotime('+6 hours')),
'conditions' => array(
array('bucket' => 'my.bucket'),
array('acl' => 'private'),
array('starts-with', '$key', $key),
array('success_action_status' => '201')
)
));
$policy = base64_encode($policy);
$signature = base64_encode(hash_hmac('sha1', $policy, 'G3wzaTNwnQC2mQB3****************', true));
return array(
'key' => $key.'${filename}',
'AWSAccessKeyId' => 'AKIAIIG**********',
'acl' => 'private',
'policy' => $policy,
'signature' => $signature,
'success_action_status' => '201'
);
Я затем использовать этот массив Params в моей JavaScript fileupload()
скрипта для прямой загрузки на Amazon S3 (запрос XHR).
Спасибо за вашу помощь, Philippe S.
Если вы запустили 'curl -I https: // my.bucket.s3.amazonaws.com /' или что-то посмотреть в заголовках, получится ли вам ответ, в котором отсутствуют все ожидаемые заголовки 'Access-Control-'? Или это некоторые, но не другие? – sideshowbarker