核心价值在 Edge Runtime 下使用 `formData()` 解析上传,并进行大小与类型双重校验。通过 `Content-Length` 与 `File.size` 双重限制防止超限与滥用。Route Handler 实现export const runtime = 'edge' const MAX = 5 * 1024 * 1024 const ALLOW = ['image/avif', 'image/webp', 'image/jpeg', 'image/png'] export async function POST(req: Request) { const len = Number(req.headers.get('content-length') || 0) if (len > MAX) { return new Response('Payload Too Large', { status: 413 }) } const fd = await req.formData() const file = fd.get('file') if (!(file instanceof File)) { return new Response('Bad Request', { status: 400 }) } if (file.size > MAX) { return new Response('Payload Too Large', { status: 413 }) } const type = file.type || 'application/octet-stream' if (!ALLOW.includes(type)) { return new Response('Unsupported Media Type', { status: 415 }) } const meta = { name: file.name, size: file.size, type } return Response.json({ ok: true, file: meta }, { headers: { 'Cache-Control': 'no-store' } }) } 要点Edge 环境下的 `File` 对象可直接读取 `size` 与 `type`,适于轻量校验。使用响应状态码表达错误类型,便于前端处理与重试策略设计。与应用协同前端在选择文件时进行本地大小与类型预检,减少无效上传。后端保留存储层校验与杀毒等二次防护,本文聚焦入口治理与响应协定。结论在 Next.js 15 Route Handlers 中进行请求级与文件级的双重治理,可显著降低超限与类型违规风险,并保持上传体验的确定性与安全性。

发表评论 取消回复