У меня возникли проблемы с загрузкой файла на Amazon S3. Я разработал сервис Grails RESTful, который использует AWS Java SDK для генерации предварительно подписанных URL-адресов. Когда клиент загружает файл, он сначала извлекает предварительно подписанный URL-адрес, а затем использует его для загрузки файла непосредственно в мой ведро S3. Так что у меня есть сервис Grails, который создает заранее подписанный URL, как так ...Не удается загрузить файлы на Amazon S3 с помощью Angularjs с предварительно подписанным URL
def generateFileUploadUrl(AmazonS3Client client, String bucketName, String key, int expiryMins) {
GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, key);
req.setMethod(HttpMethod.POST);
req.setExpiration(getExpiration(expiryMins));
return client.generatePresignedUrl(req);
}
И тогда клиент извлекает URL в следующем формате ...
https://{bucketname}.amazonaws.com/{key}?AWSAccessKeyId={accesskey}&Expires={expiry}&Signature={signature}
Затем клиент создает запрос POST с помощью Даниал Фарид Angular File Upload module как так ...
Upload.upload({
url: destUrl, // url shown above
file: file
}).progress(function (evt) {
var progressPercentage = parseInt(100.0 * evt.loaded/evt.total);
console.log('progress: ' + progressPercentage + '% ' + evt.config.file.name);
}).success(function (data, status, headers, config) {
console.log('file ' + config.file.name + 'uploaded. Response: ' + data);
}).error(function (data, status, headers, config) {
console.log('error status: ' + status);
});
Сначала я получил ошибки о настройках CORS, но после редактирования конфигурации происхождения CORS в разрешениях моего ведра, я нормативы rted получая 403 запрещенный ответ вместо. Сообщение в ответе 403: «Подписанная нами подпись запроса не соответствует предоставленной вами подписке. Проверьте свой ключ и метод подписи. '. Ключ доступа AWS и подпись были сопоставлены, поэтому я не уверен, что такое точная ошибка.
Есть ли у моей просьбы дополнительную информацию? Посмотрел на несколько других сообщений, например this, который вручную создает документ политики для отправки с URL-адресом, но не использует AWS Java SDK.
Как это бывает, мой подход отлично работает с запросами GET, и я могу получить документы. Просто не могу загрузить.
'req.setMethod (HttpMethod.POST),' '... но Post' =' PUT'!. .. –
Извините, моя вина. Я должен был сказать POST. Поправил пост, спасибо. – CSharp