Загрузка файлов на Amazon S3 с помощью Node.js: подробное руководство

В этой статье блога мы рассмотрим различные методы загрузки файлов в Amazon Simple Storage Service (S3) с использованием Node.js. S3 — это популярный сервис облачного хранения данных, предоставляемый Amazon Web Services (AWS). Мы рассмотрим несколько подходов и предоставим примеры кода, которые помогут вам понять процесс. Давайте погрузимся!

Метод 1. Использование AWS SDK для JavaScript (AWS SDK)

AWS SDK для JavaScript обеспечивает простой способ взаимодействия с сервисами AWS, включая S3. Вот пример загрузки файла этим методом:

const AWS = require('aws-sdk');
const fs = require('fs');
// Configure AWS credentials
AWS.config.update({
  accessKeyId: 'YOUR_ACCESS_KEY',
  secretAccessKey: 'YOUR_SECRET_ACCESS_KEY',
  region: 'YOUR_S3_REGION'
});
// Create an S3 instance
const s3 = new AWS.S3();
// Read the file from local disk
const fileContent = fs.readFileSync('path/to/your/file');
// Set upload parameters
const params = {
  Bucket: 'your-bucket-name',
  Key: 'path/to/destination/file',
  Body: fileContent
};
// Upload the file to S3
s3.upload(params, function(err, data) {
  if (err) {
    console.log('Error uploading file:', err);
  } else {
    console.log('File uploaded successfully. File URL:', data.Location);
  }
});

Метод 2: использование библиотеки aws-sdk-mock

Библиотека aws-sdk-mockпозволяет использовать AWS SDK для модульного тестирования или локальной разработки. Вот пример использования aws-sdk-mockдля загрузки файла на S3:

const AWS = require('aws-sdk');
const fs = require('fs');
const awsMock = require('aws-sdk-mock');
// Mock the S3 upload method
awsMock.mock('S3', 'upload', function(params, callback) {
  callback(null, { Location: 'https://your-bucket.s3.amazonaws.com/path/to/destination/file' });
});
// Read the file from local disk
const fileContent = fs.readFileSync('path/to/your/file');
// Set upload parameters
const params = {
  Bucket: 'your-bucket-name',
  Key: 'path/to/destination/file',
  Body: fileContent
};
// Upload the file to S3
AWS.S3.prototype.upload(params, function(err, data) {
  if (err) {
    console.log('Error uploading file:', err);
  } else {
    console.log('File uploaded successfully. File URL:', data.Location);
  }
});
// Restore the original S3 upload method
awsMock.restore('S3');

Метод 3: использование промежуточного программного обеспечения multer

multer — популярное промежуточное программное обеспечение для обработки загрузки файлов в Node.js. Это упрощает процесс получения и обработки файлов. Вот пример использования multerдля загрузки файла на S3:

const express = require('express');
const multer = require('multer');
const AWS = require('aws-sdk');
const app = express();
// Configure AWS credentials
AWS.config.update({
  accessKeyId: 'YOUR_ACCESS_KEY',
  secretAccessKey: 'YOUR_SECRET_ACCESS_KEY',
  region: 'YOUR_S3_REGION'
});
// Create an S3 instance
const s3 = new AWS.S3();
// Configure multer with S3 storage
const upload = multer({
  storage: multer.memoryStorage(),
  limits: { fileSize: 5 * 1024 * 1024 }
// 5MB file size limit
});
// Handle file upload route
app.post('/upload', upload.single('file'), function(req, res, next) {
  const fileContent = req.file.buffer;
  const params = {
    Bucket: 'your-bucket-name',
    Key: 'path/to/destination/file',
    Body: fileContent
  };
  s3.upload(params, function(err, data) {
    if (err) {
      console.log('Error uploading file:', err);
      res.status(500).send('Error uploading file');
    } else {
      console.log('File uploaded successfully. File URL:', data.Location);
      res.send('File uploaded successfully');
    }
  });
});
// Start the server
app.listen(3000, function() {
  console.log('Server listening on port 3000');
});

В этой статье мы обсудили несколько способов загрузки файлов на Amazon S3 с помощью Node.js. Мы рассмотрели использование AWS SDK для JavaScript, библиотеки aws-sdk-mockдля тестирования и промежуточного программного обеспечения multerдля обработки загрузки файлов. Эти примеры помогут вам начать работу с интеграцией загрузки файлов на S3 в ваши приложения Node.js.