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

SvelteKit多文件上传:如何获取文件数组实现批量上传

SvelteKit多文件上传解决方案

你当前代码只能上传单个文件,核心问题是获取文件的方式不对:data.get('file')仅会返回第一个选中的文件,要实现多文件上传,需要改用data.getAll('file')来获取所有上传的文件数组,然后循环处理每个文件。

修改后的+page.server.js代码如下:

import { writeFileSync } from 'fs';
// 确保userName变量已正确定义
export const actions = {
  add: async ({ request }) => {
    const data = await request.formData();
    // 获取所有上传的文件数组
    const files = data.getAll('file');

    try {
      // 循环处理每个文件
      for (const file of files) {
        if (file.size > 0) { // 跳过空文件(处理用户未选文件的情况)
          const ext = file.name.split('.').pop();
          // 生成唯一文件名,避免同一时间上传的文件重名覆盖
          const filename = `${userName}-${Date.now()}-${Math.random().toString(36).slice(2, 9)}.${ext}`;
          
          const ab = await file.arrayBuffer();
          writeFileSync(`static/img/${filename}`, Buffer.from(ab));
        }
      }

      return { success: true };
    } catch (e) {
      console.error(e);
      return { success: false };
    }
  }
};

关键修改点说明:

  • 用data.getAll('file')替代data.get('file'),拿到所有选中的文件组成的数组
  • 新增循环遍历文件数组,逐个处理每个上传的文件
  • 优化文件名生成逻辑,加入随机字符串避免重名覆盖
  • 增加file.size > 0的判断,处理用户未选择文件的边界情况

你的+page.svelte代码无需修改,multiple属性和表单配置都是正确的。

内容的提问来源于stack exchange,提问作者pgs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:05:39