aws-sdk란?
aws에 파일을 쉽게 저장할 수 있게 해주는 Node.js 패키지
AWS에 파일을 저장하는 이유
서버에 파일을 저장하고 있으면, 서버를 재시작할때 백업되지 않은 파일이 지워질 수 도 있다
aws-sdk 설치하기
npm i aws-sdk
ws-sdk에서 aws s3 사용하기 (GraphQL 파일 업로드 기능 구현)
S3에 접근하기 위한 API 키 입력해주기
import AWS from "aws-sdk";
AWS.config.update({
credentials: {
accessKeyId: process.env.AWS_KEY,
secretAccessKey: process.env.AWS_SECRET_KEY,
},
});
파일업로드 기능 gql 쿼리 작성하기
// typeDefs.js 에 파일 업로드용 GraphQL 지정하기
import gql from 'apollo-server';
export default gql`
type UploadResult {
ok: Boolean!
location: String
error: String
}
type Mutation {
// Upload 형식으로, 파일을 받아온다
editProfile( avatar: Upload! ): UploadResult
}
`;
// resolvers.js 에 파일 업로드 기능 구현하기
export default {
Mutation: editProfile: (_, { avatar }) => {
//Upload 요소에서 파일이름, 파일 내용물(스트림) 만들기 위한 함수 불러옴
const { filename, createReadStream } = await avatar;
// 스트림 읽어오기
const readStream = createReadStream();
// 저장할 파일이름 정하기 ( 중복된 이름 제거하기 위한 현재시간 추가 )
const fileName = `${Date.now()}-${filename}`;
// AWS S3에 파일 업로드 하기
const { Location } = await new AWS.S3()
.upload({
//사용할 AWS S3 버킷 이름 적기
Bucket: "richmalone",
//사용할 파일 경로, 이름 지정하기 (저장하고 싶은 폴더, 파일 이름)
Key: fileName,
//파일 접근 권한 설정하기 ( public-read: 누구나 읽을 수 있음 )
ACL: "public-read",
//스트림 정보로, 파일 내용물 채우기
Body: readStream,
})
// 콜백함수 사용 ( 추후 설명 )
.promise();
// 업로드 결과 출력
return {
ok: true,
location: Location,
}
}
altair로 테스트하기
altair란?
반응형