52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
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 },
|
|
);
|
|
}
|
|
}
|