Как получить URL файла в AWS S3 с использованием aws-sdk?
У меня есть проблема с AWS Lambda: я использую функцию Lambda для создания файла и сохранения его в своем бакете на S3, и это работает нормально. После выполнения метода putObject
я получаю объект data
, но он содержит только Etag
недавно добавленного объекта.
s3.putObject(params, function(err, data) {
// data содержит только Etag
});
Мне нужно получить точный URL, который можно использовать в браузере, чтобы клиент мог увидеть файл. Папка уже сделана публичной, и я могу увидеть файл, если скопирую ссылку из консоли S3.
Я пробовал использовать getSignedUrl
, но URL, который он возвращает, используется для других целей, как я полагаю.
Спасибо!
2 ответ(ов)
Если у вас есть объекты 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 дополнительную часть с регионом.
Вы можете сделать другой запрос с помощью следующего кода:
var params = {Bucket: 'bucket', Key: 'key'};
s3.getSignedUrl('putObject', params, function (err, url) {
console.log('Сгенерированный URL:', url);
});
Этот код создает подписанный URL для загрузки объекта в указанный бакет в Amazon S3. Убедитесь, что вы заменили 'bucket'
и 'key'
на реальные значения для вашего случая.
Избежать пересборки node_modules в Elastic Beanstalk
Как узнать версию установленного npm пакета?
Как задать переменные окружения из файла package.json?
Как остановить Babel от трансформации 'this' в 'undefined' и добавления "use strict"
Как использовать boto для передачи файла из Amazon S3 в Rackspace Cloud Files?