import { S3Client } from "bun"; import path from "path"; type Params = { filePath: string; fileName: string; folder?: string; }; const client = new S3Client({ accessKeyId: process.env.CLOUDFLARE_R2_ACCESS_KEY_ID, secretAccessKey: process.env.CLOUDFLARE_R2_SECRET, bucket: "coderank", endpoint: process.env.CLOUDFLARE_R2_ENDPOINT, }); export default async function s3UploadFile({ filePath, folder, fileName, }: Params) { let finalFileName = path.join(folder || "", fileName); const s3file = client.file(finalFileName); const file = Bun.file(filePath); const writer = s3file.writer({ retry: 3, queueSize: 10, partSize: 5 * 1024 * 1024, }); const reader = file.stream().getReader(); while (true) { const { done, value } = await reader.read(); if (done) break; await writer.write(value); } await writer.end(); console.log("Upload complete!"); }