기본 콘텐츠로 건너뛰기

Node.Js에서 AWS S3버킷에 파일 업로드 및 삭제

Node.Js에서 AWS S3버킷에 파일 업로드 및 삭제

AWS S3란?

Simple Storage Service의 약자로 간단히 "저장서비스"라고 부를 수 있다.

AWS라는 클라우드 서비스를 하나의 컴퓨터라고 했을 때 S3는 저장장치 라고 할 수 있다.

HTTPS 형태의 API로 데이터를 저장하거나 추출하게 해주는 웹서비스 ( S3에 파일 업로드시 해당 파일에 키 값, 객체 URL이 부여된다)

AWS S3의 구성요소

버킷 : 하나의 프로젝트를 하나의 버킷 이라고 생각하면 된다.

폴더 : 버킷 내부에는 폴더가 존재하고 , 그 폴더 안에 파일(오브젝트)가 있다.

오브젝트 : 폴더 내부에 존재하고 파일 및 파일에 설정된 내용

간단한 이용 순서

AWS S3 를 사용하기 위해선 당연히 AWS에 회원가입을 해야하고 처음 회원가입시 12개월 프리티어라고 무료로 서비스를 제공해준다. ( 단 제한된 사용량을 초과했을 시에 과금이 적용됨 , 12개월 무료기간이 지나도 마찬가지 )

회원가입을 했다면 IAM에서 사용자를 추가 하고 KEY와 PRIVATE_KEY를 발급받는다.

그리고 S3 서비스에 들어가 버킷을 생성한다.

절대로 유저 KEY 값과 PRIVATE_KEY값이 깃허브나 외부로 업로드하는 일을 하면 안됨. 깃 커밋하기 전에 한 번더 확인할 것 .gitignore가 잘 됐나 안됐나

공식 문서

s3 버킷에 있는 오브젝트 삭제 / s3.deleteObject

\https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#deleteObject-property

multerS3를 이용한 업로드

https://www.npmjs.com/package/multer-s3

multerS3 acl option : https://www.npmjs.com/package/multer-s3

코드의 일부분만 작성한걸로 환경이 저와 같지 않으므로 복붙 하시면 안됩니다.

npm install aws-sdk //AWS에서 제공하는 Node.js JavaScript용 AWS SDK npm install multer-s3 // 파일 업로드의 위치를 s3의 버킷으로 보냄

import multer from 'multer' import multerS3 from 'multer-s3' import aws from 'aws-sdk' import routes from '../routes' import Video from '../models/Video' // db 비디오 모델 //aws.S3 객체를 생성하고 s3에 담음 const s3 = new aws.S3({ accessKeyId: process.env.AWS_KEY, // user 만들면서 지급받은 키값 secretAccessKey: process.env.AWS_PRIVATE_KEY, region: 'ap-northeast-2' }) // upload video file const multerVideo = multer({ storage: multerS3({ s3: s3, // s3만 써도 됩니다. acl: 'public-read', bucket: '버킷이름/video' }) }) // delete video file // 미들웨어이기 떄문에 nodeJs exporess next 함수 포함 export const awsDeleteVideo = async (req, res, next) => { const { params: { id } } = req const video = await Video.findById(id) // 현재 URL에 전달된 id값을 받아서 db찾음 const url = video.fileUrl.split('/') // video에 저장된 fileUrl을 가져옴 const delFileName = url[url.length - 1] // 버킷에 저장된 객체 URL만 가져옴 const params = { Bucket: '버킷이름/video', Key: delFileName } s3.deleteObject(params, function(err, data) { if (err) { console.log('aws video delete error') console.log(err, err.stack) res.redirect(routes.home) } else { console.log('aws video delete success' + data) } }) next() }

from http://studyingych.tistory.com/43 by ccl(A) rewrite - 2020-03-19 02:54:04

댓글

이 블로그의 인기 게시물

[실습]NodeJS + EXPRESS + MySQL 을 이용한 게시판 만들기 3(MVC)

[실습]NodeJS + EXPRESS + MySQL 을 이용한 게시판 만들기 3(MVC) 실습2 이후 나머지 부분들 까지 라우터 모두 작성함 app/routes/posts.js app/controllers/postsController.js 현재까지의 소스 app/models/postsModel.js 현재까지의 소스 from http://thisblogbusy.tistory.com/139 by ccl(A) rewrite - 2020-03-15 09:20:05

[Full stack developer] 풀스택 개발자는 다 아는 사람? NO

[Full stack developer] 풀스택 개발자는 다 아는 사람? NO Full stack devloper 연봉과 수요가 높다는 풀스택 개발자란? 개발에대한 모든걸 알아야 될까? 'No'라고 한다 자바스크립트 책을 쓰고 코딩 커뮤니티나 학교에 무료로 나눠주는 외국 자바스크립트 선생님은 풀 스택의 의미는 모든 것을 말하는게 아니라 스택만 알면 된다고 한다. 이 스택은 MERN MERN (MongoDB, ExpressJS, ReactJS, NodeJS) 을 알면 풀 스택이라고 한다. I still get asked what is Full Stack developer? Do you need to know everything? Full...means everything right? No...you just need to know a stack. And it should probably be MERN. — JavaScript Teacher (@js_tut) March 19, 2020 참고 https://www.educative.io/edpresso/what-is-mern-stack?https://www.educative.io/courses/grokking-the-object-oriented-design-interview?aid=5082902844932096&utm;_source=google&utm;_medium=cpc&utm;_campaign=blog-dynamic&gclid;=CjwKCAjwsMzzBRACEiwAx4lLGykB0OJ1XYoz1vq-eARUzUKrN7ievxnrIJMA5hr-Ox4D1g9wlXfjrxoCPfQQAvD_BwE from http://forgottenknowledge.tistory.com/15 by ccl(A) rewrite - 2020-03-20 13:20:07

AWS instance로 Nodejs 구현하기

AWS instance로 Nodejs 구현하기 서버와 데이터베이스 관리 차원에서 효율적으로 관리하기 위해선 로컬보다는 서버를 호스팅해서 하는 것이 좋다. 우리는 Nodejs를 구동하기 위해 AWS에서 인스턴스를 할당받을 계획이다. 인스턴스의 pem키를 발급받아 nodejs와 npm까지는 설치를 완료한 상태이다. $ sudo npm install -g express 다음의 명령어를 입력하면 글로벌 옵션으로 어느 path에서든 express를 사용할 수 있게 설치한다. 다음과 같이 실행이 된다면 성공이다. 이후 Express generator를 설치한다. $ sudo npm install -g express-generator@4 버전은 4.x이며 이 역시 글로벌 옵션으로 설치해 준다. 이제 Node monitoring을 위해 nodemon을 설치해 준다. $ sudo npm install -g nodemon 모든 설치가 끝났다. 이제 nodejs를 실행시킬 프로젝트용 directory를 만든다. 이렇게 만들어 주고 express를 실행시키면 된다. $ express -e 다음과 같은 결과가 나오면 된다. 이제 node package를 설치하는 명령어를 입력하자. $ sudo npm install 이제 vi를 통해 포트번호를 정의해보자. app.set의 마지막에 한줄을 추가하면 된다. app.set('port', process.env.PORT || 9000); 이로써 우리는 9000번 포트를 사용하게 되었다. 또한 마지막줄에 서버를 생성하기 위한 코드를 작성하자. module.exports = app; var server = app.listen(app.get('port'), function() { console.log('Express server listening on port ' + server.address().port); }); 이