//aws.service.ts
import * as path from 'path';
import * as AWS from 'aws-sdk';
import { BadRequestException, Injectable } from '@nestjs/common';
import { PromiseResult } from 'aws-sdk/lib/request';
import {S3Client, PutObjectCommand} from "@aws-sdk/client-s3"
import { ConfigService } from '@nestjs/config';
@Injectable()
export class AwsService {
private readonly s3Client = new S3Client({region : this.configService.getOrThrow("AWS_REGION")})
constructor(private readonly configService : ConfigService){}
async upload(filename : string, file : Buffer){
await this.s3Client.send(new PutObjectCommand({Bucket : "AWS_Buckey_name", Key : filename , Body : file}));
}
}
//aws.controller.ts
import { Controller, Get, Post, Body, Patch, Param, Delete, UploadedFiles, BadRequestException, UploadedFile, UseInterceptors, ParseFilePipe, MaxFileSizeValidator, FileTypeValidator } from '@nestjs/common';
import { AwsService } from './aws.service';
import { CreateAwDto } from './dto/create-aw.dto';
import { UpdateAwDto } from './dto/update-aw.dto';
const multerS3 = require('multer-s3'); //왜인지 모르겠지만 내 컴퓨터에선 import가 안먹어서 require로 했다.
const AWS = require('aws-sdk');
import 'dotenv/config';
import { FileInterceptor, FilesInterceptor } from '@nestjs/platform-express';
@Controller('aws')
export class AwsController {
constructor(private readonly awsService: AwsService) { }
@Post()
@UseInterceptors(FileInterceptor('image')) //form-data key값
async uploadImage(@UploadedFile() file: Express.Multer.File) {
await this.awsService.upload(file.originalname , file.buffer)
}
}
//app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { AwsModule } from './aws/aws.module';
import { BoardModule } from './board/board.module';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [AwsModule, ConfigModule.forRoot({isGlobal : true})], //ConfigModule을 전역에서 사용할수 있게 해준다
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
//.env
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=
//
AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY 2개를 적었는데 Service에서 이걸 자동으로 가져가서 인증을 하는 것같다.
더 알아봐야겠다.. 일단 급해서 이런식으로 하면 작동을 한다.