반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 플러터 공부
- 기술공부
- 코테공부
- K8S
- Flutter
- DDD
- Kafka
- 카프카
- nestjs스터디
- 기술면접공부
- JPA예제
- 알고리즘공부
- querydsl
- Axon framework
- JPA
- 자바공부
- 스프링공부
- 자료구조공부
- nestjs공부
- 스프링부트
- 코테준비
- JPA스터디
- 스프링
- 프로그래머스
- JPA공부
- JPA 공부
- 스프링 공부
- nestjs
- 플러터 개발
- 스프링부트공부
Archives
- Today
- Total
DevBoi
[NestJs] S3업로드 모듈 생성 본문
반응형
1. 업로드 사용 모듈 생성
nest g mo uploads
nest g co uploads
nest g s uploads
2.디펜던시 추가 Express module multer 추가
npm i -g @types/multer
3. aws-sdk 및 multer-s3 추가.
npm i -D aws-sdk --force
npm i -D multer-s3 --force
4. aws s3 설정과 iam으로 사용자를 생성해서 토큰값을 넣어준다.
아래 사이트 참고해서 설정을 진행하자.
https://soraji.github.io/back/2023/02/14/awsS3/
5. 컨트롤러
import {
Controller,
Post,
UploadedFiles,
UseInterceptors,
} from '@nestjs/common';
import { FilesInterceptor } from '@nestjs/platform-express';
import { UploadsService } from './uploads.service';
@Controller('uploads')
export class UploadsController {
constructor(private readonly uploadsService: UploadsService) {}
@Post('')
@UseInterceptors(FilesInterceptor('files', 10)) // 10은 최대파일개수
async uploadFile(@UploadedFiles() files) {
console.log(files);
const imgurl: string[] = [];
await Promise.all(
files.map(async (file: Express.Multer.File) => {
const key = await this.uploadsService.uploadImage(file);
imgurl.push(""+key);
}),
);
return {
statusCode: 201,
message: `이미지 등록 성공`,
data: imgurl,
};
}
}
6.서비스
import { Injectable } from '@nestjs/common';
import * as AWS from 'aws-sdk';
@Injectable()
export class UploadsService {
private readonly s3;
constructor() {
AWS.config.update({
//region: process.env.AWS_REGION,
region: 'ap-northeast-2',
credentials: {
accessKeyId: '비밀',
secretAccessKey: '비밀',
},
});
this.s3 = new AWS.S3();
}
async uploadImage(file: Express.Multer.File) {
console.log('construct');
const key = `${Date.now() + file.originalname}`;
console.log(key);
const params = {
Bucket: '비밀',
ACL: 'public-read',
Key: key,
Body: file.buffer,
};
return new Promise((resolve, reject) => {
this.s3.putObject(params, (err, data) => {
console.log(err);
console.log(params);
console.log(data);
if (err) reject(err);
resolve(key);
});
});
}
}
//리턴 타입
// export interface SendData {
// /**
// * URL of the uploaded object.
// */
// Location: string;
// /**
// * ETag of the uploaded object.
// */
// ETag: string;
// /**
// * Bucket to which the object was uploaded.
// */
// Bucket: string;
// /**
// * Key to which the object was uploaded.
// */
// Key: string;
// }
이렇게 하면, 해당 성공 or 실패를 전달 받을 수 있는 코드가 대략적으로 구현이 된다.
환경마다 파일로 빼서 해당 토큰 및 키를 관리할 예정이다...(다음 포스팅때)
또한 여러개의 파일을 저장할 수 있다.
그럼 오늘은 이만 끗
반응형
'Develop > [NestJs]' 카테고리의 다른 글
[NestJs] TypeORM entity cascade 설정 (0) | 2023.07.01 |
---|---|
[NestJS] S3이미지 업로드 모듈 제작 (0) | 2023.07.01 |
[NestJs] 다대일 매핑 (0) | 2023.06.19 |
[NestJs] Api 좀 더 Restful 하게 변경 (0) | 2023.06.18 |
[NestJs] 수정, 삭제 (0) | 2023.06.18 |