//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에서 이걸 자동으로 가져가서 인증을 하는 것같다.
더 알아봐야겠다.. 일단 급해서 이런식으로 하면 작동을 한다.

+ Recent posts