Ваш код верен, дважды проверьте следующее:
Политика доступа к вашему ведру.
Ваше разрешение на ведение через ваш ключ API.
Ваш ключ и секрет API.
Имя и ключ вашего сегмента.
ДляВы можете использовать следующую политику:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucket/*"
}
]
}
Измените корзину на свое имя корзины.
Для пользователей и прав доступа к ключу (# 2) вы должны следоватьэти шаги:
1-Goto AWS Identity and Access Management (IAM), нажмите ссылку «Политики» и нажмите кнопку «Создать политику».
2-Выберите вкладку JSON.
3-Введите следующую инструкцию, убедитесь, что изменили имя корзины и нажмите "Кнопка "Просмотреть политику".
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "s3:*",
"Resource": "arn:aws:s3:::YOURBUCKETNAME"
}
]
}
4 - Введите название своей политики и нажмите кнопку "Создать политику".
5-Нажмите ссылку «Пользователи» и найдите свое текущее имя пользователя (для этого у вас уже есть ключ доступа и секрет)
6-Click on «add»Кнопка «Права доступа».
7 - Добавьте политику, созданную на предыдущем шаге, и сохраните.
Наконец, убедитесь, что ваша корзина недоступна из Public, добавьте в файл правильный тип содержимого и установите signatureVersion: 'v4'
Окончательный код должен быть таким, спасибо @Vaisakh PS:
const s3bucket = new AWS.S3({
signatureVersion: 'v4',
accessKeyId: 'my-access-key-id',
secretAccessKey: 'my-secret-access-key',
Bucket: 'my-bucket-name',
})
const uploadParams = {
Body: file.data,
Bucket: 'my-bucket-name',
ContentType: file.mimetype,
Key: `files/${file.name}`,
}
s3bucket.upload(uploadParams, function (err, data) {
// ...
})
const url = s3bucket.getSignedUrl('getObject', {
Bucket: 'my-bucket-name',
Key: 'file-key',
Expires: 300,
})