Как получить подписанный URL-адрес AWS S3 с помощью mongoDB Stitch?

Я пытаюсь получить некоторые файлы из корзины S3, но файлы настроены как личные. В настоящее время я использую ListObjects для получения всех файлов в моем сегменте, но в наборе результатов он не включает подписанный URL-адрес, и, поскольку файл является частным, я не могу отобразить его на своем веб-сайте.

Я использую mongoDB Stitch для подключения к своему ведру S3.

Вот мой код, который извлекает все файлы из моего ведра.

const aws = this.client.getServiceClient(AwsServiceClient.factory, "TESTAPP");
const args = {
   Bucket: bucketName,
   Prefix: folderName
};

const request = new AwsRequest.Builder()
   .withService('s3')
   .withAction('ListObjects')
   .withArgs(args);

aws.execute(request.build())
    .then(result => {
        console.log(result);
    }

Когда я смотрю console.log, я вижу всю информацию о файле, но я пытаюсь получить доступ к файлу, поскольку это частный файл, я получаю сообщение об ошибке, что у меня нет к нему доступа.

Мне нужно сделать еще один вызов, чтобы получить подписанный URL-адрес, или можно получить все сразу?


person Ennio    schedule 25.10.2018    source источник
comment
Не могли бы вы вставить точное сообщение об ошибке и код, который вы используете для получения изображения?   -  person haley    schedule 26.10.2018
comment
Я получаю ошибку 403 (запрещено). Файлы являются частными в корзине, а URL-адрес, который я использую, - это ключ https://s3.amazonaws.com/{bucket}/{key} - это имя объекта, которое я получаю для переменной результата.   -  person Ennio    schedule 26.10.2018


Ответы (1)


Итак, у вас есть несколько вариантов.

  1. Если вы публикуете изображения, просто сделайте их общедоступными на Amazon. Если вы отключите опцию списка в разрешениях на Amazon для этих изображений, тогда людям понадобится точный URL-адрес для просмотра, поэтому не похоже, что случайные люди в Интернете будут просматривать ваши фотографии. Так что, если это действительно конфиденциальные данные, этот вариант может подойти.

  2. Вы можете использовать метод GetObject с Stitch sdk. Это вернет вам версию изображения в формате base64. Затем вы можете либо преобразовать его в изображение, либо встроить base64 непосредственно в src тега <img> в вашем html, который будет выглядеть примерно так

<img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUA
    AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
    9TXL0Y4OHwAAAABJRU5ErkJggg==" />

  1. Вы можете подписать запрос GET, указав свой AccessKeyId и подпись в качестве параметров запроса. Эта ссылка покажет вам, как создать подпись. .
person haley    schedule 26.10.2018
comment
Спасибо, что помогло мне. - person Ennio; 26.10.2018