24 lines
1.0 KiB
TypeScript
24 lines
1.0 KiB
TypeScript
import { NextRequest, NextResponse } from "next/server";
|
|
|
|
export async function POST(request: NextRequest) {
|
|
try {
|
|
const formData = await request.formData();
|
|
const file = formData.get("file");
|
|
if (!file || !(file instanceof File)) {
|
|
return NextResponse.json({ ok: false, error: "请选择文件" }, { status: 400 });
|
|
}
|
|
if (file.size > 20 * 1024 * 1024) {
|
|
return NextResponse.json({ ok: false, error: "文件大小不能超过 20MB" }, { status: 400 });
|
|
}
|
|
const publicUrl = process.env.MINIO_PUBLIC_URL || "https://example.com/uploads";
|
|
const prefix = process.env.MINIO_UPLOAD_PREFIX || "joins";
|
|
const ext = file.name.split(".").pop() || "jpg";
|
|
const filename = `${prefix}/${Date.now()}-${Math.random().toString(36).slice(2)}.${ext}`;
|
|
const url = `${publicUrl}/${filename}`;
|
|
return NextResponse.json({ ok: true, url });
|
|
} catch (e) {
|
|
console.error("upload-media error:", e);
|
|
return NextResponse.json({ ok: false, error: "上传失败" }, { status: 500 });
|
|
}
|
|
}
|