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
相关产品推荐
相关产品推荐

