23 lines
775 B
TypeScript
23 lines
775 B
TypeScript
import { writeFile, mkdir } from "node:fs/promises";
|
|
import { resolve } from "node:path";
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const parts = await readMultipartFormData(event);
|
|
if (!parts || parts.length === 0) {
|
|
throw createError({ statusCode: 400, message: "No file provided" });
|
|
}
|
|
|
|
const filePart = parts.find((p) => p.name === "file");
|
|
if (!filePart || !filePart.filename) {
|
|
throw createError({ statusCode: 400, message: "No file provided" });
|
|
}
|
|
|
|
const filename = filePart.filename.replace(/[^a-zA-Z0-9._-]/g, "_");
|
|
const dir = resolve(process.cwd(), "public/files");
|
|
|
|
await mkdir(dir, { recursive: true });
|
|
await writeFile(resolve(dir, filename), filePart.data);
|
|
|
|
return { name: filename, size: filePart.data.length };
|
|
});
|