请求体大小限制中间件
请求体大小限制中间件可以限制请求体的文件大小。
此中间件首先使用请求中 Content-Length
标头的值(如果存在)。如果未设置,它将在流中读取请求体,如果其大小超过指定的文件大小,则执行错误处理程序。
导入
ts
import { Hono } from 'hono'
import { bodyLimit } from 'hono/body-limit'
用法
ts
const app = new Hono()
app.post(
'/upload',
bodyLimit({
maxSize: 50 * 1024, // 50kb
onError: (c) => {
return c.text('overflow :(', 413)
},
}),
async (c) => {
const body = await c.req.parseBody()
if (body['file'] instanceof File) {
console.log(`Got file sized: ${body['file'].size}`)
}
return c.text('pass :)')
}
)
选项
必需 maxSize: number
您要限制的文件的最大文件大小。默认值为 100 * 1024
- 100kb
。
可选 onError: OnError
如果指定的文件大小超过,将调用的错误处理程序。
在 Bun 中用于大型请求的用法
如果明确使用请求体大小限制中间件来允许大于默认值的请求体,则可能需要相应地更改您的 Bun.serve
配置。 在撰写本文时,Bun.serve
的默认请求体大小限制为 128MiB。如果您将 Hono 的请求体大小限制中间件设置为大于该值的值,您的请求仍将失败,此外,在中间件中指定的 onError
处理程序将不会被调用。这是因为 Bun.serve()
将将状态代码设置为 413
并终止连接,然后再将请求传递给 Hono。
如果您想使用 Hono 和 Bun 接受大于 128MiB 的请求,您需要为 Bun 也设置限制
ts
export default {
port: process.env['PORT'] || 3000,
fetch: app.fetch,
maxRequestBodySize: 1024 * 1024 * 200, // your value here
}
或者,取决于您的设置
ts
Bun.serve({
fetch(req, server) {
return app.fetch(req, { ip: server.requestIP(req) })
},
maxRequestBodySize: 1024 * 1024 * 200, // your value here
})