0

Как получить URL файла в AWS S3 с использованием aws-sdk?

10

У меня есть проблема с AWS Lambda: я использую функцию Lambda для создания файла и сохранения его в своем бакете на S3, и это работает нормально. После выполнения метода putObject я получаю объект data, но он содержит только Etag недавно добавленного объекта.

s3.putObject(params, function(err, data) {
    // data содержит только Etag
});

Мне нужно получить точный URL, который можно использовать в браузере, чтобы клиент мог увидеть файл. Папка уже сделана публичной, и я могу увидеть файл, если скопирую ссылку из консоли S3.

Я пробовал использовать getSignedUrl, но URL, который он возвращает, используется для других целей, как я полагаю.

Спасибо!

2 ответ(ов)

0

Если у вас есть объекты s3Bucket и fileName, и вы хотите извлечь URL, вот один из вариантов реализации:

function getUrlFromBucket(s3Bucket, fileName) {
    const { config: { params, region } } = s3Bucket;
    const regionString = region.includes('us-east-1') ? '' : ('-' + region);
    return `https://${params.Bucket}.s3${regionString}.amazonaws.com/${fileName}`;
}

Этот код создает URL для доступа к объекту в указанном S3 бакете, учитывая регион. Если регион - us-east-1, то он не добавляет к URL дополнительную часть с регионом.

0

Вы можете сделать другой запрос с помощью следующего кода:

var params = {Bucket: 'bucket', Key: 'key'};
s3.getSignedUrl('putObject', params, function (err, url) {
  console.log('Сгенерированный URL:', url);
});

Этот код создает подписанный URL для загрузки объекта в указанный бакет в Amazon S3. Убедитесь, что вы заменили 'bucket' и 'key' на реальные значения для вашего случая.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь