NODEJS] AWS의 S3에 파일 업로드 다운로드 구현

AWS EC2 서버에서 공지사항에 들어가는 첨부 파일을 업로드 하고 다운로드 하는 기능이 필요 했다.

다음의 순서로 처리하면 쉽게 된다.

1. 사용자 생성 하기

1. AWS IAM에서 사용자를 생성 하고, 애세스 유형을 프로그램 방식으로 선택

사용자 추가
{: .image-left}

이후 결과로 Access key ID, Secret access key를 알고 있어야 한다.

2. 권한으로 AmazonS3FullAccess를 할당

사용자 권한
{: .image-left}

2. nodejs에서 aws-sdk 사용하기

# 프로젝트 초기화
$> npm init

# aws-sdk 모듈 설치
$> npm install aws-sdk --save

3. bucket 생성 하기

createBucket.js

const AWS = require('aws-sdk');
const ID = 'Access key Id';
const SECRET = '';
const BUCKET_NAME = '';
const s3 = new AWS.S3({
  accessKeyId: ID,
  secretAccessKey: SECRET
});
const params = {
  Bucket: BUCKET_NAME,
  CreateBucketConfiguration: {
      // Set your region here
      LocationConstraint: "ap-northeast-2"
  }
};

s3.createBucket(params, function(err, data) {
  if (err) console.log(err, err.stack);
  else console.log('Bucket Created Successfully', data.Location);
});

4. 파일 업로드

uploadFile.js

const fs = require('fs');
const AWS = require('aws-sdk');
const BUCKET_NAME = '';
const s3 = new AWS.S3({
  accessKeyId: '',
  secretAccessKey: ''
});
const uploadFile = (fileName) => {
  const fileContent = fs.readFileSync(fileName);
  const params = {
      Bucket: BUCKET_NAME,
      Key: 'test.txt', // File name you want to save as in S3
      Body: fileContent
  };
  s3.upload(params, function(err, data) {
      if (err) { throw err; }
      console.log(`File uploaded successfully. ${data.Location}`);
  });
};
uploadFile('./uploads/test.txt');

5. 파일 다운로드

download.js

const fs = require('fs');
const AWS = require('aws-sdk');
const BUCKET_NAME = '';
const s3 = new AWS.S3({
  accessKeyId: '',
  secretAccessKey: ''
});
const downloadFile = (fileName) => {
  const params = {
      Bucket: BUCKET_NAME,
      Key: 'test.txt', // File name you want to save as in S3
  };
  s3.getObject(params, function(err, data) {
      if (err) {
          throw err;
      }
      fs.writeFileSync(fileName, data.Body.toString());
  });
};
downloadFile('../../uploads/test-download.txt');

참고자료

Posted by lahuman

댓글을 달아 주세요