Amazon S3 Доступ к изображению по URL

Я загрузил изображение в хранилище Amazon S3. Но как я могу получить доступ к этому изображению по URL-адресу? Я сделал папку и файл общедоступными, но все равно получаю ошибку AccessDenied, если попытаюсь получить к ней доступ по URL https://s3.amazonaws.com/bucket/path/image.png

Ответ 1

Это старый вопрос, но для любого, кто сталкивается с этим вопросом, как только я сделал файл открытым, я смог получить доступ к моему изображению как https://mybucket.s3.amazonaws.com/myfolder/afile.jpg

Ответ 2

Вы можете получить доступ к своему изображению, используя:

https://s3.amazonaws.com/bucketname/foldername/imagename.jpg

или если нет папок, вы можете сделать:

https://s3.amazonaws.com/bucketname/imagename.jpg

upvote, если помогает. Он соответствует настоящему AWS от 30 мая 2017 года.

Ответ 3

Похоже, теперь вы можете просто щелкнуть правой кнопкой мыши по любой папке внутри ведра и выбрать "Сделать общедоступным", чтобы сделать все в этой папке общедоступным. Он может не работать на уровне ковша.

Ответ 4

убедитесь, что вы получаете доступ к изображению, используя тот же случай, который был загружен и сохранен на S3. например, если вы загрузили image_name. JPG, вы должны использовать одно и то же имя, но не имя_файла. jpg

Ответ 5

Я столкнулся с этим вопросом, ища решение подобной проблемы с невозможностью доступа к изображениям.

Оказывается, что изображения с % в имени файла при обращении к нему должны иметь URL-адрес %, закодированный в %25.

то есть. photo%20of%20a%20banana%20-%2019%20june%202016.jpg должен быть доступен через photo%2520of%2520a%2520banana%2520-%252019%2520june%25202016.jpg.

Однако URL-кодирование полного пути не сработало для нас, поскольку косые черты и т.д. будут закодированы, и путь не будет работать. В нашем конкретном случае просто замена % на %25 на всех путях доступа сделала разницу.

Ответ 6

У меня была такая же проблема. У меня проблема с интервалом в URL-адресе изображения. Я сделал это, чтобы он работал:

String imgUrl=prizes.get(position).getImagePreview().replaceAll("\\s","%20");

теперь передайте этот url для picasso:

Picasso.with(mContext)
            .load(imgUrl)
            .into(mImageView);

Ответ 7

На вашей консоли щелкните правой кнопкой мыши по изображению, которое вы хотите получить, и нажмите "Сделать общедоступным"; после этого щелкните правой кнопкой мыши по изображению и нажмите "Свойства" и скопируйте ссылку с расширенного вида.

Ответ 8

Один из самых простых способов - создать политику с ведром.

 {
       "Version": "2012-10-17",
       "Statement": [{
           "Sid": "MakeItPublic",
           "Effect": "Allow",
           "Principal": "*", 
           "Action": "s3:GetObject",
           "Resource": "arn:aws:s3:::yourbucketname.com/*"
    }]
   }

Ответ 9

Чтобы получить доступ к частным изображениям через URL, вы должны предоставить аутентификацию строки запроса. Для аутентификации строки запроса версии 4 требуются параметры X-Amz-Algorithm, X-Amz-Credential, X-Amz-Signature, X-Amz-Date, X-Amz-SignedHeaders и X-Amz-Expires.

Ответ 10

в моем случае я загрузил изображение в частном порядке, поэтому я не смог получить к нему доступ. я сделал следующий код

const AWS = require('aws-sdk')
const myBucket = 'BUCKET_NAME'
  const myKey = 'FILE_NAME.JPG'
  const signedUrlExpireSeconds = 60 * 1
  const s3 = new AWS.S3({
    accessKeyId: "ACCESS_KEY_ID",
    signatureVersion: 'v4',
    region: 'S3_REGION',
    secretAccessKey: "ACCESS_SECRET"
  });

  const url = s3.getSignedUrl('getObject', {
      Bucket: myBucket,
      Key: myKey,
      Expires: signedUrlExpireSeconds
  })

  console.log(url)