Files
outline/server/middlewares/multipart.ts
Apoorv Mishra 401d1ba871 multipart middleware (#5809)
* fix: multipart middleware

* fix: reviews
2023-09-12 10:21:58 +05:30

38 lines
1023 B
TypeScript

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();
};
}