Untitled
unknown
plain_text
8 months ago
1.4 kB
5
Indexable
// app/api/r2-upload/route.ts
import { NextResponse } from "next/server";
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
// Create S3 client for Cloudflare R2
const s3Client = new S3Client({
region: "auto",
endpoint: process.env.R2_ENDPOINT,
credentials: {
accessKeyId: process.env.R2_ACCESS_KEY_ID || "",
secretAccessKey: process.env.R2_SECRET_ACCESS_KEY || "",
},
});
export async function POST(request: Request) {
try {
const { searchParams } = new URL(request.url);
const key = searchParams.get("key");
if (!key) {
return NextResponse.json(
{ error: "Key parameter is required" },
{ status: 400 }
);
}
const contentType = request.headers.get("content-type") || "application/json";
const body = await request.json();
// Upload to R2 bucket
const command = new PutObjectCommand({
Bucket: process.env.R2_BUCKET_NAME,
Key: key,
Body: JSON.stringify(body),
ContentType: contentType,
CacheControl: "no-cache, no-store, must-revalidate",
});
await s3Client.send(command);
return NextResponse.json({ success: true });
} catch (error) {
console.error("Error uploading to R2:", error);
return NextResponse.json(
{ error: "Failed to upload to R2" },
{ status: 500 }
);
}
}Editor is loading...
Leave a Comment