노드 스크립트를 사용하여 S3에 파일을 일괄 업로드하는 방법

이 기사에서는 amazon S3 버킷에 파일을 업로드하기 위해 실행할 수 있는 작은 nodejs 스크립트를 살펴보겠습니다.

전제 조건



Amazon s3가 무엇을 사용하는지 이해한다고 가정하겠습니다. 그렇지 않은 경우 여기link를 방문하여 자세히 알아볼 수 있습니다.

업로드 스크립트 작성




// uploadTos3.js

const fs = require('fs');
const readDir = require('recursive-readdir');
const path = require('path');
const AWS = require('aws-sdk');
const mime = require('mime-types');

AWS.config.update({
  region: 'ap-south-1',
  accessKeyId: process.env.AWS_ACCESS_KEY_ID,
  secretAccessKey: process.env.SECRET_ACCESS_KEY,
  maxRetries: 3
});

const directoryPath = path.resolve(__dirname, './images');

const getDirectoryFilesRecursive = (dir, ignores = []) => {
  return new Promise((resolve, reject) => {
    readDir(dir, ignores, (err, files) => (err ? reject(err) : resolve(files)));
  });
};

const generateFileKey = fileName => {
  const S3objectPath = fileName.split('/images/')[1];
  return `website-assets/${S3objectPath}`;
};

const s3 = new AWS.S3();

const uploadToS3 = async () => {
  try {
    const fileArray = await getDirectoryFilesRecursive(directoryPath, [
      'BUILD_ID'
    ]);
    fileArray.map(file => {
      // Configuring parameters for S3 Object
      const S3params = {
        Bucket: 'public-read-bucket',
        Body: fs.createReadStream(file),
        Key: generateFileKey(file),
        ACL: 'public-read',
        ContentType: mime.lookup(file),
        ContentEncoding: 'utf-8',
        CacheControl: 'immutable,max-age=31536000,public'
      };
      s3.upload(S3params, function(err, data) {
        if (err) {
          // Set the exit code while letting
          // the process exit gracefully.
          console.error(err);
          process.exitCode = 1;
        } else {
          console.log(`Assets uploaded to S3: `, data);
        }
      });
    });
  } catch (error) {
    console.error(error);
  }
};

uploadToS3();


참고: 모든 자산을 웹사이트 자산 폴더에 업로드하고 있습니다. 클라우드프론트 배포는 이를 기본 경로로 사용합니다.

명령node uploadToS3을 실행하여 모든 파일을 S3 버킷에 업로드합니다.

좋은 웹페이지 즐겨찾기