chore: release 0.0.1
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
"use server";
|
||||
|
||||
import { Buffer } from "node:buffer";
|
||||
import { randomUUID } from "node:crypto";
|
||||
import { NextResponse } from "next/server";
|
||||
import { createSupabaseRouteClient } from "@/lib/supabase/server";
|
||||
|
||||
const BUCKET = "media";
|
||||
const DIRECTORY = "luckysheet";
|
||||
|
||||
export async function POST(request: Request) {
|
||||
const supabase = await createSupabaseRouteClient();
|
||||
const formData = await request.formData();
|
||||
const file = formData.get("image");
|
||||
|
||||
if (!(file instanceof File)) {
|
||||
return NextResponse.json({ code: 400, msg: "缺少 image 文件" }, { status: 400 });
|
||||
}
|
||||
|
||||
const arrayBuffer = await file.arrayBuffer();
|
||||
const buffer = Buffer.from(arrayBuffer);
|
||||
const extension = file.name?.split(".").pop() || "bin";
|
||||
const objectPath = `${DIRECTORY}/${randomUUID()}.${extension}`;
|
||||
|
||||
const { error: uploadError } = await supabase.storage
|
||||
.from(BUCKET)
|
||||
.upload(objectPath, buffer, { contentType: file.type || "application/octet-stream", upsert: false });
|
||||
|
||||
if (uploadError) {
|
||||
return NextResponse.json({ code: 500, msg: "上传失败", detail: uploadError.message }, { status: 500 });
|
||||
}
|
||||
|
||||
const {
|
||||
data: { publicUrl },
|
||||
} = supabase.storage.from(BUCKET).getPublicUrl(objectPath);
|
||||
|
||||
return NextResponse.json({
|
||||
code: 200,
|
||||
msg: "ok",
|
||||
url: publicUrl,
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user