상세 컨텐츠

본문 제목

S3에서 파일을 업로드 해보자 (node)

AWS

by 성찬우 2023. 6. 27. 02:14

본문

테스트이기 때문에 s3를 만든다 하더라도 테스트 후 바로 지우세요 

 

 

가장 먼저 IAM 에서 루트 사용자로 액세스 키를 발급받아서 .CSV 파일을 로컬에 가져왔으며 

S3-ACCESS-KEY및SECRET ACCESS KEY를 받아왔다. 추후에 .env 파일에서 사용될것이다. 

 

 

 

S3를 생성하고 버킷에 권한 - 정책을 설정한다. 

 

내 정책은 다음과 같다. Resource는 arn 주소에 버킷에있는 /* 하위 디렉토리에 대한 접근을 허가하는 것이다. 

{
    "Version": "2012-10-17",
    "Id": "testPolicy",
    "Statement": [
        {
            "Sid": "Stmt1658663877057",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::s3-client-test/*"
        }
    ]
}

 

 


이후 npm init을 한 프로젝트에 설치되는 것들은 다음과 같다. 

const express = require('express');
const multer = require('multer');
const fs = require('fs');
const { S3Client } = require('@aws-sdk/client-s3');
const multerS3 = require('multer-s3');
require('dotenv').config();
const app = express();

npm list로 확인해보면 위 2개는 3점 버전대로 잘 설치되었다. 버전 이슈가 있을수도 있어서 확인해야한다. 

.env 파일에 s3관련 키값들을 잘 넣어주었다. 

 

S3Client 설정 코드는 다음과 같다. 

const s3Client = new S3Client({
    credentials: {
        accessKeyId: process.env.S3_ACCESS_KEY_ID,
        secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
    },
    region: 'ap-northeast-2',
});

env에 설정한 키-벨류값들을 가져와서 유저 인증을한다. 

 

const upload = multer({
    storage: multerS3({
        s3: s3Client,
        bucket: 's3-client-test',
        key: function (request, file, callback) {
            const uniqueFilename = `${Date.now()}-${file.originalname}`;
            callback(null, uniqueFilename);
        },
    }),
});

이후 upload라는 함수를 만드는데 s3인증 객체와 bucket 이름을 적어준다. 

 

app.post('/image-upload', upload.single('custom'), (req, res) => {
 
    if (!req.file) {
        return res.status(400).json({ error: '파일을 선택해 주세요.' });
    }

    const fileUrl = req.file.location;
    res.status(200).json({ message: '파일이 성공적으로 업로드되었습니다.', fileUrl });
});

api 를 하나 만들어주는데 upload.single('custom')을 잘 확인해야한다. 

custom이라는 이름으로 jpg파일을 업로드해야 multer에서 제대로 인식하고 가져올 수가 있다. 

실행시키고 s3를 확인해보면 

파일이 정상적으로 업로드 되는 것을 확인 할 수 있다. 

'AWS' 카테고리의 다른 글

AWS S3 적용하기  (0) 2022.08.02
EC2 연결 [SSH, Key]  (0) 2022.07.31
CACHE 캐시 에 관하여  (0) 2022.07.30
Amazon 의 기본 개념 [ Amazon S3 , CloudFront]  (0) 2022.07.29

관련글 더보기

댓글 영역