import { Injectable } from '@nestjs/common';
import { v4 as uuidv4 } from 'uuid';
import * as AWS from 'aws-sdk';
@Injectable()
export class StorageService {
private readonly s3: AWS.S3 = new AWS.S3({
endpoint: '<https://kr.object.ncloudstorage.com>',
region: process.env.AWS_REGION,
credentials: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
},
});
private readonly bucketName = 'traveline';
private generateFilename(originalname: string) {
const extension = originalname.split('.').pop();
const uniqueId = uuidv4();
return `${uniqueId}.${extension}`;
}
async upload(file: Express.Multer.File) {
const uploadParams = {
Bucket: this.bucketName,
Key: this.generateFilename(file.originalname),
Body: file.buffer,
ACL: 'public-read',
};
const result = await this.s3.upload(uploadParams).promise();
return {
imageUrl: result.Location,
};
}
}
import { Module } from '@nestjs/common';
import { StorageService } from './storage.service';
@Module({
providers: [StorageService],
exports: [StorageService],
})
export class StorageModule {}
네이버 클라우드의 가이드 문서에서 AWS.S3
객체를 생성하는 코드를 참고했다.
const AWS = require('aws-sdk');
const endpoint = new AWS.Endpoint('<https://kr.object.ncloudstorage.com>');
const region = 'kr-standard';
const access_key = 'ACCESS_KEY';
const secret_key = 'SECRET_KEY';
const S3 = new AWS.S3({
endpoint,
region,
credentials: {
accessKeyId : access_key,
secretAccessKey: secret_key
}
});
const bucket_name = 'sample-bucket';