#javascript #reactjs #amazon-web-services #amazon-s3
#javascript #reactjs #amazon-веб-сервисы #amazon-s3
Вопрос:
Я пытаюсь извлечь объект S3 с помощью хранилища AWS
fetchAvatar = async () => {
try {
const imageData = await Storage.get("public/public/us-east-2:/1597842961073/family.jpg")
console.log(imageData)
} catch (err) {
console.log('error fetching avatar: ')
console.log(err)
}
}
Когда я нажимаю на ссылку, которую предоставляет ImageData, я получаю ошибку NoSuchKey, однако она существует
Я убедился, что изображение является общедоступным и доступно всем, поэтому проблем с аутентификацией возникнуть не должно. Я также рассмотрел аналогичную проблему с этим, и я убедился, что в моих ключах изображений нет пробелов или большого количества специальных клавиш. Я немного озадачен этим…
Комментарии:
1. Также, если я попаду в консоль управления S3 и нажму на изображение, оно действительно существует и загружается вручную .. idk, если это поможет, но я надеюсь, что это поможет.
Ответ №1:
Итак, я выяснил причину, и это должно что-то сделать с управлением AWS S3. По какой-то причине, каждый раз, когда я загружаю изображение, папка сбрасывается и становится privet. Когда я переделываю папки и общедоступное изображение вручную, я могу правильно отобразить изображение…Так что я думаю, это скорее проблема AWS или ошибка, которую им нужно исправить, я думаю
Комментарии:
1. Можно с уверенностью предположить, что проблема не внутри S3, а в вашей настройке есть что-то, чего вы не понимаете. Не существует такого понятия, как сброс папки и ее приватность, потому что в S3 нет такого понятия, как разрешения на уровне папки, за исключением тех, которые обрабатываются в политиках IAM, о которых вы не упомянули и которые не будут изменены при загрузке объектов. Включите ведение журнала в вашей корзине, и то, что на самом деле происходит, должно стать очевидным из журналов.
2. Да, я вроде как новичок в AWS, но я разобрался, мне просто пришлось добавить новую политику в корзину из-за того, что она автоматически закрыта. И это решило проблему.
Ответ №2:
Я предлагаю использовать javascript aws sdk, вы можете получить объект из корзины, как показано ниже:
var params = {
Bucket: "your-bucket-name",
Key: "yourFileName.jpg"
};
s3.getObject(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data);
});
Обновить:
Вы можете определить свой регион при создании экземпляра s3, например:
const s3 = new S3({
region: 'eu-central-1',
});
Комментарии:
1. нужно ли мне также добавлять регион в параметры? поскольку объекты s3 состоят из ключа, корзины и региона?
2. @StevanNajeeb Вы можете определить свой регион при создании экземпляра s3, я обновлю ответ, что-то вроде: const sqs = new S3({ region: ‘eu-central-1’, });