coderank-server-data/utils/s3-upload.ts
2026-01-26 15:13:14 +01:00

44 lines
977 B
TypeScript

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!");
}