+page.svelte
<form action="?/upload" method="post" enctype="multipart/form-data" >
<input type="file" name="file" accept="application/pdf" />+page.server.js
export const actions = { upload: async ({ cookies, request, locals }) => { const data = await request.formData(); //HOW CAN I GET and save the file locally with writeFileSync? return { success: true }; }
};I haven't found a way to handle file uploads in sveltkit. Any ideas? The file is small.. so there is no problem in loading to memory.
1 Answer
You can just get a File instance from the form data and read it via one of its methods like text(), stream() or arrayBuffer(). e.g.
// would recommend using these async functions
import { writeFile } from 'fs/promises';
//...
const file = data.get('file'); // value of 'name' attribute of input
await writeFile(`./files/${file.name}`, await file.text());
// or
await writeFile(`./files/${file.name}`, file.stream());
// or
await writeFile(`./files/${file.name}`, new Uint8Array(await file.arrayBuffer()));Writing files is a fairly dangerous operation, would recommend validating that the file name is actually just a name, not a full path.
3