메소드
{
ETag: '(etag)',
ServerSideEncryption: 'AES256',
VersionId: '(versionid)',
Location: '(버킷 내 리소스가 저장된 위치)',
key: '(파일명)',
Bucket: '(bucket)'
}
{
ETag: '(etag)',
ServerSideEncryption: 'AES256',
VersionId: '(versionid)'
}
파일 여러개 업로드
async uploadFiles(files: Express.Multer.File[]) {
this.logger.debug('file recieve...');
const params = {
Bucket: process.env.AWS_S3_BUCKET_NAME,
ACL: 'private',
Key: '',
Body: null,
};
try {
await Promise.all(
files.map(async (file: Express.Multer.File) => {
params.Key = file.originalname;
params.Body = file.buffer;
const upload = await this.s3.upload(params).promise();
console.log(upload);
}),
);
this.logger.debug('upload file to s3');
} catch (err) {
this.logger.debug('upload failed');
console.log(err);
}
}
사실 백엔드 서버쪽에서 파일을 다운로드 받을 일은 잘 없다. 보통은 프론트 쪽에서 unresigned url을 이용해서 s3에 바로 접근한다. 그래도 일단 정리해봤다.
메소드
getObject()
파일 여러개 다운로드
async downloadFiles(payload: any) {
this.logger.debug('download request from client...');
console.log(payload.files);
const streams = [];
const params = {
Bucket: process.env.AWS_S3_BUCKET_NAME,
Key: ''
}
try {
await Promise.all(
payload.files.map(async (file: string) => {
params.Key = file;
const stream = await this.s3.getObject(params).createReadStream();
streams.push(new StreamableFile(stream));
}),
);
this.logger.debug('success to get files');
return streams;
} catch (err) {
this.logger.debug('failed to get files');
console.log(err);
}
}
메소드
deleteObject()
파일 1개 삭제
async deleteFile(payload: any) {
this.logger.debug('delete request from client...');
const params = {
Bucket: process.env.AWS_S3_BUCKET_NAME,
Key: payload.file
}
try {
const result = await this.s3.deleteObject(params).promise();
this.logger.debug('success to delete file');
return { res_code: 201, message: '파일 삭제 성공' };
} catch (err) {
this.logger.debug('failed to delete file');
console.log(err);
}
}