Рубрики
Без рубрики

Как загрузить файлы в S3 из Node.js

У меня был простой пример использования. Я создавал проект совета по трудоустройству, и пришло время создать форму для подачи нового предложения о работе. Рекрутер может ввести сведения о компании, сведения о работе и изображение логотипа компании. Данные хранятся в базе данных, и сначала я попытался сохранить логотип в базе данных, но через некоторое время я понял, что, хотя технически все в порядке, у меня возникли некоторые проблемы с хранением двоичных данных, и это заняло слишком много времени для выполнения задачи.

У меня был простой пример использования. Я создавал проект доска вакансий , и пришло время создать форму для отправки нового предложения о работе.

Рекрутер может ввести сведения о компании, сведения о работе и изображение логотипа компании.

Данные хранятся в базе данных, и сначала я попытался сохранить логотип в базе данных, но через некоторое время я понял, что, хотя технически все в порядке, у меня возникли некоторые проблемы с хранением двоичных данных, и это заняло слишком много времени для выполнения задачи. Поэтому я сказал: “Хорошо, давайте просто загрузим его в S3”.

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

Поэтому я пошел создавать корзину S3.

У меня уже был аккаунт AWS. Если вы этого не сделаете, начните здесь: https://aws.amazon.com .

Как только у вас будет настроена учетная запись, создайте пользователя IAM в AWS. Войдите в AWS, нажмите свое имя сверху, а затем “Мои учетные данные безопасности”.

На боковой панели нажмите “Пользователи” и “Добавить пользователя”. Включите “Программный доступ”.

Перейдите к следующему экрану с помощью кнопок, которые вы найдете в нижней части страницы (“Далее: Разрешения”).

Нажмите кнопку “Прикрепить существующие политики напрямую”.:

Введите “S3” в фильтр, чтобы отобразить политики S3

Выберите разрешение AmazonS3FullAccess :

Как только пользователь будет создан, у вас будет пара идентификаторов ключа доступа и секретный ключ доступа. Скопируйте их в свой файл .env в проекте, который у вас есть, или сохраните их где-нибудь, чтобы вы могли использовать их позже.

Затем зайдите в S3 и создайте корзину. С домашней страницы S3 https://s3.console.aws.amazon.com нажмите кнопку “Создать корзину”.

Задайте имя, выберите регион AWS, отключите “Блокировать весь общедоступный доступ” (мы перейдем к разрешениям в другом посте) и нажмите кнопку “Создать корзину” в нижней части страницы.

Сделано! Теперь пришло время погрузиться в Node.js . Я использую этот код в Next.js, на стороне сервера, в вызове API.

Сначала установите пакет aws-sdk с помощью npm install aws-sdk .

Как уже упоминалось, храните свои коды доступа AWS в .env :

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_BUCKET_NAME=

Добавь

import AWS from 'aws-sdk'

наверху.

Затем инициализируйте объект s3 с помощью:

const s3 = new AWS.S3({
  accessKeyId: process.env.AWS_ACCESS_KEY_ID,
  secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
})

Теперь, когда вы хотите загрузить файл, загрузите его из хранилища

const filename = 'the-file-name'
const fileContent = fs.readFileSync(fileName)

const params = {
  Bucket: process.env.AWS_BUCKET_NAME,
  Key: `${filename}.jpg`,
  Body: fileContent
}

s3.upload(params, (err, data) => {
  if (err) {
    reject(err)
  }
  resolve(data.Location)
})

Оригинал: “https://flaviocopes.com/node-upload-files-s3/”