Как получить подписанный URL-адрес AWS S3 с помощью mongoDB Stitch? - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь получить некоторые файлы из корзины 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-адреса или можно получить все сразу?

1 Ответ

0 голосов
/ 26 октября 2018

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

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

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

<img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUA
    AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
    9TXL0Y4OHwAAAABJRU5ErkJggg==" />
Вы можете подписать запрос GET с помощью AccessKeyId и Signature в качестве параметров запроса.Эта ссылка покажет вам, как создать подпись.
...