核心价值在 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 中进行请求级与文件级的双重治理,可显著降低超限与类型违规风险,并保持上传体验的确定性与安全性。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部