Я пытаюсь использовать новую функцию FineUploader, позволяющую напрямую загружать файлы на amazon s3. В настоящее время я не могу загружать фотографии. Я получаю сообщение об ошибке: "Неверный документ политики или заголовки запроса!"
Разработчики попросили публиковать вопросы здесь, в stackoverflow.
Я следую их инструкциям на этой странице:
При настройке я также эмулировал файл примера, связанный с ним: https://github.com/Widen/fine-uploader-server/blob/master/php/s3/s3demo.php
У меня настроен javascript с очень небольшим количеством опций:
$('#fineuploader-s3').fineUploaderS3({
request: {
endpoint: "http://thenameofmybucket.s3.amazonaws.com",
accessKey: “mypublicaccesskey”
},
signature: {
endpoint: "s3demo.php"
},
iframeSupport: {
localBlankPagePath: "/success.html"
},
cors: {
expected: true
}
});
Я знаю, что есть много мест, где это могло пойти не так для меня. Я никогда раньше не использовал s3 или Fineuploader, так что извините, если это глупые вопросы. Но вот места, где я больше всего запутался в настройке. У меня такое ощущение, что проблема заключается в № 1:
(1) В примере javascript путь к подписи настраивается следующим образом:
// REQUIRED: Path to our local server where requests can be signed.
signature: {
endpoint: "/s3/signtureHandler"
},
Я не был уверен, что это пустой файл, в котором создается некоторый json, или он должен указывать на php-скрипт, где функция для создания json, в моем случае s3demo.php, которую я скопировал напрямую.
(2) В файле s3demo.php я изменил только следующие строки:
$clientPrivateKey = $_SERVER['I put my private key here'];
$expectedBucket = "http://thenameofmybucket.s3.amazonaws.com";
function handlePreflightedRequest() {
// If you are relying on CORS, you will need to adjust the allowed domain here.
header('Access-Control-Allow-Origin: http://mywebsitename.org');
}
(3) Это то, что у меня есть для моего файла CORS, я не был уверен, правильно ли это, потому что примеры на странице с инструкциями не включают теги:
<CORSRule>
<AllowedOrigin>http://mywebsitename.org</AllowedOrigin>
<AllowedMethod>POST</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
(4) Как указано в инструкции, я зашел в панель IAM и создал группу с политикой, точно скопированной из инструкции, но с фактическим названием моей корзины:
{
"Version":"2012-10-17",
"Statement":[{
"Effect":"Allow",
"Action":"s3:PutObject",
"Resource":"arn:aws:s3:::thenameofmybucket/*”
}]
}
, затем пользователь, от которого я получил открытый и закрытый ключи доступа, используемые в файлах javascript и php соответственно. Имя пользователя специально нигде в сценариях не используется.
Я надеюсь, что есть что-то действительно очевидное, что я сделал здесь неправильно. Спасибо за ваше время.
signature.endpoint
должен указывать на php-скрипт. - person Mark Feltner   schedule 21.08.2013