IDrive 사용을 위한 공식 문서에는 AWS SDK v2를 사용 중이지만 이를 v3로 업그레이드 할 필요성이 있음 (2023년부터 maintenance 단계로 진입)
⇒ 추후에 개발 진행하면서 변경해야 할 것 같습니다.
JavaScript (v3) 용 SDK를 사용하는 Amazon S3 예제 - AWS SDK for JavaScript
현재 AWS SDK v2를 사용한 예시
import { Injectable } from '@nestjs/common';
import * as AWS from 'aws-sdk';
import * as fs from 'fs';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
async createBucket() {
const endpoint = new AWS.Endpoint(process.env.IDRIVE_ENDPOINT);
const s3 = new AWS.S3({
endpoint,
region: 'e2',
credentials: {
accessKeyId: process.env.IDRIVE_ACCESS_KEY_ID,
secretAccessKey: process.env.IDRIVE_SECRET_ACCESS_KEY,
},
signatureVersion: 's3v4', // 이게 문제였어
});
// // file read call
// const bucketName = 'test-bucket';
// const objectName = 'test-folder/test.txt';
// s3.getObject(
// {
// Bucket: bucketName,
// Key: objectName,
// },
// (err, data) => {
// if (err) console.error('Error:', err);
// else console.log(data.Body.toString('utf-8'));
// },
// );
// // head 'my-object' in bucket 'my-bucket' params
// const params = {
// Bucket: 'test-bucket',
// Key: 'test-folder/test.txt',
// };
// // head object call
// s3.headObject(params, function (err, data) {
// if (err) {
// console.log('Error:', err);
// } else {
// console.log('Success:', data);
// }
// });
// // put object call
// try {
// const bucketName = 'test-bucket';
// const filePath = './test.jpg';
// const folderName = 'test-folder/';
// const objectName = `${folderName}test.jpg`;
// // Create folder
// const createFolderResponse = await s3
// .putObject({
// Bucket: bucketName,
// Key: folderName,
// ACL: 'public-read',
// })
// .promise();
// console.log('Create Folder Response:', createFolderResponse);
// // Upload file
// const params = {
// Bucket: bucketName,
// Key: objectName,
// ACL: 'public-read',
// Body: fs.createReadStream(filePath),
// };
// const uploadFileResponse = await s3.upload(params).promise();
// const objectUrl = process.env.IDRIVE_STORAGE_URL + '/' + objectName;
// console.log('Upload File Response:', uploadFileResponse);
// console.log('Object URL:', objectUrl);
// return objectUrl;
// } catch (error) {
// console.error('Error:', error);
// throw error;
// }
// }
// get Object put Pre Signed Url
const bucketName = 'test-bucket';
const objectParamsForPreSign = {
Bucket: bucketName,
Key: `test123.txt`,
Expires: 6000, // 60초 동안만 url 유지
};
await s3
.getSignedUrlPromise('putObject', objectParamsForPreSign)
.then((data) => {
console.log('Presigned URL : ', data);
})
.catch((error) => {
console.error(error);
});
// // list buckets call
// s3.listBuckets(function (err, data) {
// if (err) {
// console.log('Error:', err);
// } else {
// console.log('Success:', data);
// }
// });
// // create/delete bucket call
// const params = {
// Bucket: 'test-bucket',
// };
// s3.deleteBucket(params, function (err, data) {
// if (err) {
// console.log('Error:', err);
// } else {
// console.log('Success:', data);
// }
// });
}
}