SvelteKit文件上传:如何用writeFileSync本地保存小文件
在SvelteKit中获取并本地保存上传文件(使用writeFileSync)
实现步骤
- 从
formData中获取上传的文件对象 - 将文件转换为可写入本地的
Buffer格式 - 确保目标存储目录存在(避免写入失败)
- 使用
fs.writeFileSync完成文件保存
完整代码示例
+page.svelte(补充提交按钮)
<form action="?/upload" method="post" enctype="multipart/form-data" > <input type="file" name="file" id="file" accept="application/pdf" /> <button type="submit">上传文件</button> </form>
+page.server.js
import { writeFileSync, mkdirSync, existsSync } from 'node:fs'; import { join } from 'node:path'; export const actions = { upload: async ({ request }) => { const data = await request.formData(); const file = data.get('file'); // 检查是否有文件被上传 if (!file) { return { success: false, error: '未选择文件' }; } // 将文件转换为Buffer const buffer = Buffer.from(await file.arrayBuffer()); // 定义存储目录(项目根目录下的uploads文件夹) const uploadDir = join(process.cwd(), 'uploads'); // 如果目录不存在则创建 if (!existsSync(uploadDir)) { mkdirSync(uploadDir, { recursive: true }); } // 拼接文件路径,使用原始文件名 const filePath = join(uploadDir, file.name); try { // 写入文件到本地 writeFileSync(filePath, buffer); return { success: true, message: '文件上传成功' }; } catch (err) { return { success: false, error: `文件保存失败:${err.message}` }; } } };
注意事项
- 确保Node.js环境有写入目标目录的权限
- 如果需要处理重名文件,可以给文件名添加时间戳或随机字符串避免覆盖
- 因为你提到文件体积较小,直接加载到内存处理完全没问题,无需流式上传
内容的提问来源于stack exchange,提问作者Rodrigo Pereira
相关产品推荐
相关产品推荐

