Как мне загрузить клиентский файл для просмотра в Amazon S3?

Позвольте мне начать с того, что я обычно очень неохотно отвечаю на эти вопросы, поскольку я всегда чувствую, чтоs ответ на все где-то в Интернете. Потратив бесчисленные часы в поисках ответа на этот вопрос, янаконец, мы отказались от этого утверждения, однако.

предположение

Это работает:

s3.getSignedUrl('putObject', params);
Что я пытаюсь сделать?Загрузите файл через PUT (со стороны клиента) в Amazon S3, используя метод getSignedUrlРазрешить кому-либо просматривать файл, который был загружен на S3

Замечания: Если там'Это более простой способ разрешить загрузку на стороне клиента (iPhone) в Amazon S3 с предварительно подписанными URL-адресами (и без предоставления учетных данных на стороне клиента). I 'м все уши.

Основные проблемы *При просмотре Консоли управления AWS загруженный файл имеет пустой набор прав доступа и метаданных.При просмотре загруженного файла (то есть, дважды щелкнув файл в Консоли управления AWS), я получаюAccessDenied ошибка.Что я пробовал?Попробуйте № 1: мой оригинальный код

В NodeJS я генерирую предварительно подписанный URL-адрес примерно так:

var params = {Bucket: mybucket, Key: "test.jpg", Expires: 600};
s3.getSignedUrl('putObject', params, function (err, url){
  console.log(url); // this is the pre-signed URL
});

Предварительно подписанный URL выглядит примерно так:

https://mybucket.s3.amazonaws.com/test.jpg?AWSAccessKeyId=AABFBIAWAEAUKAYGAFAA&Expires=1391069292&Signature=u%2BrqUtt3t6BfKHAlbXcZcTJIOWQ%3D

Теперь я загружаю файл через PUT

curl -v -T myimage.jpg https://mybucket.s3.amazonaws.com/test.jpg?AWSAccessKeyId=AABFBIAWAEAUKAYGAFAA&Expires=1391069292&Signature=u%2BrqUtt3t6BfKHAlbXcZcTJIOWQ%3D

ПРОБЛЕМА

Я получаю* Основные проблемы вышеперечисленное

Попробуйте №2: Добавление Content-Type и ACL на PUTI '

Мы также попытались добавить Content-Type и x-amz-acl в мой код, заменив параметры следующим образом:

var params = {Bucket: mybucket, Key: "test.jpg", Expires: 600, ACL: "public-read-write", ContentType: "image/jpeg"};

Тогда я попробую хороший старый ПОЛОЖИЛ:

curl -v -H "image/jpeg" -T myimage.jpg https://mybucket.s3.amazonaws.com/test.jpg?AWSAccessKeyId=AABFBIAWAEAUKAYGAFAA&Content-Type=image%2Fjpeg&Expires=1391068501&Signature=0yF%2BmzDhyU3g2hr%2BfIcVSnE22rY%3D&x-amz-acl=public-read-write

ПРОБЛЕМА

Мой терминал выводит некоторые ошибки:

-bash: Content-Type=image%2Fjpeg: command not found
-bash: x-amz-acl=public-read-write: command not found

И я также получаю* Основные проблемы вышеперечисленное.

Попробуйте №3: изменение разрешения Bucket, чтобы быть публичным

Все перечисленные ниже элементы отмечены галочкой в Консоли управления AWS)

Grantee: Everyone can [List, Upload/Delete, View Permissions, Edit Permissions]
Grantee: Authenticated Users can [List, Upload/Delete, View Permissions, Edit Permissions]
Bucket Policy
{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "Stmt1390381397000",
        "Effect": "Allow",
        "Principal": {
            "AWS": "*"
        },
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::mybucket/*"
    }
]
}
Попробуйте №4: настройка разрешений IAM

Я установил политику пользователя так:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*"
    }
  ]
}

Групповая политика AuthenticatedUsers должна быть такой:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1391063032000",
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
Попробуйте №5: настройка политики CORS

Я установил политику CORS для этого:



    
        *
        PUT
        POST
        DELETE
        GET
        3000
        *
    

И ... Теперь ям здесь.

Ответы на вопрос(7)

Ваш ответ на вопрос