webkitdirectory需同时满足type="file"、webkitdirectory、multiple三属性,且仅HTTPS/localhost下有效,用户须主动点击触发;file.webkitRelativePath仅在目录选择模式下填充,拖放或粘贴时为空。

webkitdirectory 属性不生效,选不了文件夹
Chrome/Edge 浏览器必须同时满足三个条件,webkitdirectory 才能触发文件夹选择模式:input 元素需带 type="file"、webkitdirectory 和 multiple 三个属性;页面必须通过 HTTPS 或 localhost 访问(HTTP 非本地域会被浏览器静默禁用);用户必须主动点击 input 触发选择,不能用 JavaScript 模拟 click()。常见错误是漏掉 multiple,或在非安全上下文(如直接双击打开的 file:// 协议页面)下测试。
拿到的 file.webkitRelativePath 是空或 undefined
这个值只在 webkitdirectory 模式下由浏览器填充,且仅当文件实际位于所选文件夹的子路径中时才有效。如果用户手动把单个文件拖进 input,或用 macOS Finder 复制粘贴到表单区域,webkitRelativePath 就不会存在。更隐蔽的坑是:某些 Linux 桌面环境(如 GNOME)或旧版 Chrome(if (!file.webkitRelativePath) { /* 当作单文件处理 */ },不要直接拼接路径。
上传后服务端收不到完整目录结构
前端传的是扁平化的 FileList,每个 File 对象只带 name 和 webkitRelativePath,后端不会自动重建文件夹。你需要:在 FormData 中为每个文件显式添加路径字段,例如 formData.append('file', file, file.webkitRelativePath);后端接收时解析该字段,按斜杠分割路径并逐级创建目录(注意防御 ../ 路径遍历,用 path.join() 或等效安全函数校验);避免直接用原始 file.name 作为保存名,否则所有同名文件会覆盖。
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
大文件夹上传卡死或报错 413 Request Entity Too Large
这不是前端问题,而是 Nginx/Apache 默认限制了请求体大小。Nginx 需在 server 或 location 块中加 client_max_body_size 50M;;Apache 则需设 LimitRequestBody 52428800(单位字节)。但改配置只是治标——真正要支撑几十个文件、GB 级文件夹,得上分片上传:前端用 File.slice() 切块,每块附带 chunkIndex 和 totalChunks;后端按文件标识暂存分片,收齐后再合并。否则单次请求极易超时或内存溢出。
立即学习“前端免费学习笔记(深入)”;
最常被忽略的一点:webkitdirectory 在 Firefox 中要用 directory 属性替代,Safari 完全不支持——别指望一套代码全兼容。真要覆盖 Safari 用户,只能退回到 zip 压缩包上传 + 后端解压的方案。


















