Я попробовал несколько различных методов, следуя примерам с этого сайта и других источников, но я бью кирпичную стену. После того, как я не смог заставить это работать более чем после месяца ежедневных попыток по-разному, я сузил его до следующего, используя последнюю версию AWS SDK для aws-php-sdk-2.7.1. Вы думаете, это будет работать правильно? Я пытаюсь разрешить пользователям редактировать веб-страницу с помощью JavaScript, записывать разметку в Div и помещать ее в корзину, используя подписанный URL на Amazon S3. Я получаю сообщение об ошибке, что мой метод подписи неверен. Я неправильно понял, что SDK должен выполнять эту работу за меня, или я делаю что-то не так. Мой ключ и пароль работают нормально, используя JAVA с PUT, но мне нужно решение, которое работает на стороне клиента. Другие схемы без SDK использовали другие средства для подписи URL, но я не мог заставить их работать здесь… Я действительно мог бы использовать некоторую помощь. Спасибо.
Это где я сейчас нахожусь.
Мои Cors на ведре:
////////////////////////////////////////////////// //////////
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedOrigin>*:8443</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Как отмечено на сайте jQuery (http://api.jquery.com/jquery.ajax/), не все браузеры поддерживают запросы «PUT» и «DELETE».
Запрос из браузера содержит Content-Type
заголовок, которого нет в указанном URL, что делает подпись недействительной. Вы должны включить эту информацию в подпись, как если бы вы выполняли операцию PUT непосредственно в PHP. Я не смог найти документацию, соответствующую синтаксису, который вы используете для выполнения этого запроса, но проблема Github для AWS SDK указывает на то, что должно работать следующее:
$command = $client->getCommand("PutObject", array(
'Bucket' => ...,
'Key' => ...,
'ContentType' => 'txt/html; charset=utf-8',
));
$url = $command->createPresignedUrl('+10 minutes');
Кроме того, используемый вами тип контента недопустим. (Это не помешает загрузке работать, но заставит ее некорректно отображаться в браузерах.) Вы хотите text/html
не txt/html
; Типы MIME обычно не сокращаются.