You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 07:20:42