wasabi cloud 공식 quick start youtube 영상
빨간 상자는 필수 나머지는 선택 그냥 Next 눌러도 문제 없음
(제일 가까운 곳이 일본이라서 도쿄를 고름, 필자 서버는 한국에 있음)
아래 사진과 같으면 Bucket 생성 완료
그림에 순서로 클릭하여 access key 생성
만들어진 key를 CSV 파일로 다운 (access-key와 secret-key를 볼 수 있는데 절대로 secret-key는 외부 노출금지!!)
사진과 같이 프로젝트에서 다운하고 싶은 파일을 넣어둔다(필자는 .txt 파일을 사용 파일 안에 내용을 대충 아무거나 넣어됨)
nest.js 코드 아래 링크에 들어가서 참고
github nest.js 코드
// AWS s3S3 API와 호완 가능
import { S3Client, GetObjectCommand } from "@aws-sdk/client-s3";
import * as fs from "fs";
import { pipeline } from "stream";
import { promisify } from "util";
const pipelineAsync = promisify(pipeline);
// S3 클라이언트 초기화
const s3 = new S3Client({
region: "Tokyo ap-northeast-1", // Wasabi에서 설정한 리전
endpoint: "https://s3.ap-northeast-1-ntt.wasabisys.com", // Wasabi의 S3 호환 엔드포인트S3 엔드포인트
credentials: {
accessKeyId: "YOUR_ACCESS_KEY_ID", // Wasabi Access Key
secretAccessKey: "YOUR_SECRET_ACCESS_KEY", // Wasabi Secret Key
},
});
// 파일 다운로드 함수
const downloadFile = async (bucketName: string, key: string, destinationPath: string) => {
try {
const command = new GetObjectCommand({
Bucket: bucketName, // 버킷 이름
Key: key, // 다운로드할 파일의 키 (bucket안에서 파일 위치)
});
// GetObjectCommand로 객체 가져오기
const response = await s3.send(command);
// response.Body 스트림을 로컬 파일로 저장
if (response.Body) {
await pipelineAsync(response.Body as NodeJS.ReadableStream, fs.createWriteStream(destinationPath));
console.log(`File downloaded successfully to ${destinationPath}`);
} else {
console.error("No file body received from S3.");
}
} catch (error) {
console.error("Error downloading file:", error);
}
};
// 사용 예제
downloadFile("bbucket1", "test1/textfile.txt", "./download/hello_world.txt");
실행하기 전에 /download 디렉토리를 만들어야 오류 발생 안함