Initial commit: KOC LOOP platform
This commit is contained in:
51
app/api/upload/route.ts
Normal file
51
app/api/upload/route.ts
Normal file
@@ -0,0 +1,51 @@
|
||||
import {
|
||||
ensureSchema,
|
||||
getDashboardData,
|
||||
getRawDb,
|
||||
getUploadBucket,
|
||||
uid,
|
||||
} from "../../../lib/mvp-db";
|
||||
import { adminForbidden, isAdminRequest } from "../../../lib/admin-auth";
|
||||
|
||||
export const runtime = "edge";
|
||||
|
||||
export async function POST(request: Request) {
|
||||
if (!isAdminRequest(request)) return adminForbidden();
|
||||
try {
|
||||
await ensureSchema();
|
||||
const form = await request.formData();
|
||||
const distributionId = String(form.get("distributionId") ?? "");
|
||||
const file = form.get("file");
|
||||
if (!distributionId || !(file instanceof File) || file.size === 0) {
|
||||
return Response.json({ error: "请选择需要上传的截图" }, { status: 400 });
|
||||
}
|
||||
if (!file.type.startsWith("image/")) {
|
||||
return Response.json({ error: "只支持图片文件" }, { status: 400 });
|
||||
}
|
||||
const extension = file.name.split(".").at(-1)?.replace(/[^a-zA-Z0-9]/g, "") ||
|
||||
"jpg";
|
||||
const key = `creator-center/${distributionId}/${uid("shot")}.${extension}`;
|
||||
await getUploadBucket().put(key, await file.arrayBuffer(), {
|
||||
httpMetadata: { contentType: file.type },
|
||||
});
|
||||
const db = getRawDb();
|
||||
await db
|
||||
.prepare(
|
||||
`UPDATE distributions SET
|
||||
screenshot_key = ?,
|
||||
exposure = NULL,
|
||||
views = NULL,
|
||||
ocr_status = 'failed',
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = ?`,
|
||||
)
|
||||
.bind(key, distributionId)
|
||||
.run();
|
||||
return Response.json(await getDashboardData());
|
||||
} catch (error) {
|
||||
return Response.json(
|
||||
{ error: error instanceof Error ? error.message : "上传失败" },
|
||||
{ status: 500 },
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user