Полное руководство по загрузке файлов с помощью Multer и Amazon S3

В этой статье блога мы рассмотрим различные методы загрузки файлов с использованием Multer, промежуточного программного обеспечения для обработки данных multipart/form в Node.js, и Amazon S3 (Simple Storage Service). Мы предоставим примеры кода для каждого метода, чтобы помочь вам понять процесс реализации. Итак, приступим!

Метод 1: загрузка одного файла
Первый метод предполагает загрузку одного файла в Amazon S3 с помощью Multer. Вот пример того, как этого можно добиться:

const multer = require('multer');
const multerS3 = require('multer-s3');
const AWS = require('aws-sdk');
// Configure AWS SDK
AWS.config.update({
  accessKeyId: 'YOUR_ACCESS_KEY',
  secretAccessKey: 'YOUR_SECRET_ACCESS_KEY',
});
// Create an S3 instance
const s3 = new AWS.S3();
// Configure Multer
const upload = multer({
  storage: multerS3({
    s3: s3,
    bucket: 'YOUR_BUCKET_NAME',
    key: function (req, file, cb) {
      cb(null, 'uploads/' + Date.now() + '_' + file.originalname);
    },
  }),
});
// Define the upload route
app.post('/upload', upload.single('file'), (req, res) => {
  // File uploaded successfully
  res.json({ message: 'File uploaded successfully' });
});

Метод 2: загрузка нескольких файлов
Чтобы загрузить несколько файлов с помощью Multer и Amazon S3, вы можете немного изменить предыдущий пример. Вот пример:

const upload = multer({
  storage: multerS3({
    s3: s3,
    bucket: 'YOUR_BUCKET_NAME',
    key: function (req, file, cb) {
      cb(null, 'uploads/' + Date.now() + '_' + file.originalname);
    },
  }),
});
app.post('/upload', upload.array('files', 5), (req, res) => {
  // Files uploaded successfully
  res.json({ message: 'Files uploaded successfully' });
});

Метод 3: загрузка файлов с пользовательскими метаданными
Вы также можете включать пользовательские метаданные при загрузке файлов в Amazon S3. Вот пример:

const upload = multer({
  storage: multerS3({
    s3: s3,
    bucket: 'YOUR_BUCKET_NAME',
    key: function (req, file, cb) {
      cb(null, 'uploads/' + Date.now() + '_' + file.originalname);
    },
    metadata: function (req, file, cb) {
      cb(null, { customKey: 'Custom Value' });
    },
  }),
});
app.post('/upload', upload.single('file'), (req, res) => {
  // File uploaded successfully
  res.json({ message: 'File uploaded successfully' });
});

Метод 4: Фильтрация файлов
Вы можете добавить функцию фильтрации, чтобы ограничить типы загружаемых файлов. Вот пример, в котором разрешены только файлы изображений:

const upload = multer({
  storage: multerS3({
    s3: s3,
    bucket: 'YOUR_BUCKET_NAME',
    key: function (req, file, cb) {
      cb(null, 'uploads/' + Date.now() + '_' + file.originalname);
    },
  }),
  fileFilter: function (req, file, cb) {
    if (
      file.mimetype === 'image/jpeg' ||
      file.mimetype === 'image/png' ||
      file.mimetype === 'image/gif'
    ) {
      cb(null, true);
    } else {
      cb(new Error('Invalid file type'));
    }
  },
});
app.post('/upload', upload.single('file'), (req, res) => {
  // File uploaded successfully
  res.json({ message: 'File uploaded successfully' });
});

В этой статье мы рассмотрели различные методы загрузки файлов с помощью Multer и Amazon S3. Мы рассмотрели загрузку одного файла, загрузку нескольких файлов, загрузку файлов с пользовательскими метаданными и фильтрацию файлов. Используя эти методы, вы можете эффективно обрабатывать загрузку файлов в своих приложениях Node.js. Не стесняйтесь экспериментировать с этими примерами кода и настраивать их в соответствии со своими требованиями.