Path: blob/master/webhooks/webhook_preview/lib/cloudflare/uploadToR2.ts
1082 views
// lib/cloudflare/uploadToR2.ts1import { PutObjectCommand, S3Client } from "@aws-sdk/client-s3";2import { randomUUID } from "crypto";34const s3Client = new S3Client({5region: "auto",6endpoint: `https://${process.env.CLOUDFLARE_R2_ACCOUNT_ID}.r2.cloudflarestorage.com`,7credentials: {8accessKeyId: process.env.CLOUDFLARE_R2_ACCESS_KEY_ID!,9secretAccessKey: process.env.CLOUDFLARE_R2_SECRET_ACCESS_KEY!,10},11});1213export async function uploadToR2(file: File, prefix = "uploads") {14const buffer = Buffer.from(await file.arrayBuffer());15const extension = file.name.split(".").pop() || "bin";16const key = `${prefix}/${randomUUID()}.${extension}`;1718const command = new PutObjectCommand({19Bucket: process.env.CLOUDFLARE_R2_BUCKET_NAME!,20Key: key,21Body: buffer,22ContentType: file.type,23});2425await s3Client.send(command);2627return {28url: `https://${process.env.CLOUDFLARE_R2_PUBLIC_DOMAIN}/${key}`,29key,30};31}323334