You need to enable JavaScript to run this app. input标签置空后重复上传同文件夹失败e.target.files为空问题
优惠活动
大模型
产品
解决方案
定价
更多

input标签置空后重复上传同文件夹失败e.target.files为空问题

文件夹重复上传失败问题修复方案

根因分析

  • 代码中直接将e.target.files(浏览器原生只读FileList类数组对象)的引用存入uploadFolders数组,没有存储实际的文件对象副本
  • 点击上传控件时触发的click回调会将input的value置为null,此时input绑定的FileList会同步清空,数组中存储的引用指向的对象也会变为空,最终触发上传失败

修复代码

const uploadFolders = [];
let uploadFolderTemplate = ``;

function upload(e) {
    const files = e.target.files;

    if (files.length > 0) {
        // 核心修改:将FileList转成普通数组存储,脱离和input元素的引用关联
        const fileList = Array.from(files);
        uploadFolders.push(fileList);
        // 若需要保留原路径属性,可自行挂载到数组上
        fileList.path = files[0].path;

        uploadFolderTemplate = `
            <div class="card folder-list-info">
                <div class="card-header" style="display: inline-flex;">
                    <span>${files[0].path}</span>
                    <button type="button" class="close" aria-label="Close" style="margin-left: auto">
                        <span aria-hidden="true">&times;</span>
                    </button>
                </div>

                <div class="card-body">
                    <div class="ext-box">
                    
                    </div>

                    <div class="colum-box">
                        
                    </div>

                    <div class="exports-data-file-box">

                    </div>
                </div>
            </div>`;
        // 处理完文件后再清空input value,时机更合理
        e.target.value = null;
    }
}


const folderUploadInput = document.querySelector('.folder-upload-input');
folderUploadInput.addEventListener('change', upload)

验证说明

修复后重复上传同一文件夹时,已存储的文件列表不会受input清空操作影响,可正常读取文件完成上传。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 00:48:00