import { S3Client, GetObjectCommand, PutObjectCommand } from '@aws-sdk/client-s3'; import { createReadStream, createWriteStream } from 'fs'; import { pipeline } from 'stream/promises'; const createS3Client = () => { return new S3Client({ region: process.env.AWS_REGION || 'us-east-1', endpoint: process.env.S3_ENDPOINT, credentials: { accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, }, forcePathStyle: true, }); }; export const downloadFromS3 = async (bucket, key, localPath) => { const client = createS3Client(); try { const response = await client.send( new GetObjectCommand({ Bucket: bucket, Key: key }) ); const writeStream = createWriteStream(localPath); await pipeline(response.Body, writeStream); } finally { client.destroy(); } }; export const uploadToS3 = async (bucket, key, localPath) => { const client = createS3Client(); try { const readStream = createReadStream(localPath); await client.send( new PutObjectCommand({ Bucket: bucket, Key: key, Body: readStream, }) ); } finally { client.destroy(); } };