Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
parkpow
GitHub Repository: parkpow/deep-license-plate-recognition
Path: blob/master/webhooks/webhook_preview/lib/cloudflare/uploadToR2.ts
1082 views
1
// lib/cloudflare/uploadToR2.ts
2
import { PutObjectCommand, S3Client } from "@aws-sdk/client-s3";
3
import { randomUUID } from "crypto";
4
5
const s3Client = new S3Client({
6
region: "auto",
7
endpoint: `https://${process.env.CLOUDFLARE_R2_ACCOUNT_ID}.r2.cloudflarestorage.com`,
8
credentials: {
9
accessKeyId: process.env.CLOUDFLARE_R2_ACCESS_KEY_ID!,
10
secretAccessKey: process.env.CLOUDFLARE_R2_SECRET_ACCESS_KEY!,
11
},
12
});
13
14
export async function uploadToR2(file: File, prefix = "uploads") {
15
const buffer = Buffer.from(await file.arrayBuffer());
16
const extension = file.name.split(".").pop() || "bin";
17
const key = `${prefix}/${randomUUID()}.${extension}`;
18
19
const command = new PutObjectCommand({
20
Bucket: process.env.CLOUDFLARE_R2_BUCKET_NAME!,
21
Key: key,
22
Body: buffer,
23
ContentType: file.type,
24
});
25
26
await s3Client.send(command);
27
28
return {
29
url: `https://${process.env.CLOUDFLARE_R2_PUBLIC_DOMAIN}/${key}`,
30
key,
31
};
32
}
33
34