multipart middleware (#5809)
* fix: multipart middleware * fix: reviews
This commit is contained in:
37
server/middlewares/multipart.ts
Normal file
37
server/middlewares/multipart.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import { Next } from "koa";
|
||||
import { bytesToHumanReadable } from "@shared/utils/files";
|
||||
import { InvalidRequestError } from "@server/errors";
|
||||
import { APIContext } from "@server/types";
|
||||
import { getFileFromRequest } from "@server/utils/koa";
|
||||
|
||||
export default function multipart({
|
||||
maximumFileSize,
|
||||
}: {
|
||||
maximumFileSize: number;
|
||||
}) {
|
||||
return async function multipartMiddleware(ctx: APIContext, next: Next) {
|
||||
if (!ctx.is("multipart/form-data")) {
|
||||
ctx.throw(
|
||||
InvalidRequestError("Request type must be multipart/form-data")
|
||||
);
|
||||
}
|
||||
|
||||
const file = getFileFromRequest(ctx.request);
|
||||
if (!file) {
|
||||
ctx.throw(InvalidRequestError("Request must include a file parameter"));
|
||||
}
|
||||
|
||||
if (file.size > maximumFileSize) {
|
||||
ctx.throw(
|
||||
InvalidRequestError(
|
||||
`The selected file was larger than the ${bytesToHumanReadable(
|
||||
maximumFileSize
|
||||
)} maximum size`
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
ctx.input = { ...(ctx.input ?? {}), file };
|
||||
return next();
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user