无法获取本地绝对路径:file.name仅返回纯文件名(如“report.pdf”),file.path在所有现代浏览器中均为undefined;所谓“C:\fakepath\”是旧版IE残留,Chrome/Firefox/Safari/新版Edge均已移除;开发者工具显示的path是误导性视图,不可访问。
浏览器出于安全限制,file 对象根本不会暴露本地绝对路径——你拿到的 file.name 是纯文件名(如 "report.pdf"),file.path 在所有现代浏览器中均为 undefined 或空字符串。所谓“伪路径”(如 c:\fakepath\report.pdf)仅在某些旧版 ie/edge 中短暂出现过,当前 chrome/firefox/safari/新版 edge 均已移除该行为。
为什么 console.log(file) 看起来有 path 字段?
这是开发者工具的显示误导:Chrome DevTools 有时会在 File 对象展开视图里标注 webkitRelativePath 或模拟路径,但它不是真实可读属性,访问 file.path 或 file.webkitRelativePath(非标准)会返回空或 undefined。
-
file.name永远只返回不含路径的文件名 -
file.size和file.type可靠,但file.lastModified是时间戳,不是路径 - 试图用
URL.createObjectURL(file)生成的 blob URL(如blob:http://…)也不是本地路径,且页面刷新后失效
choose 回调里能读到什么?
只有 obj.files 是原始、未篡改的 FileList,它提供的是标准 Web API 接口,不包含路径信息:
- 多选时
obj.files[0].name、obj.files[1].name各取各的文件名 -
obj.files[0].size单位是字节,转 KB 记得除以1024,不是1014 -
obj.files[0].type是 MIME 类型(如"application/pdf"),可能为空(浏览器无法推断时) - 不要调用
obj.pushFile()来“取文件”,它返回的是内部队列 ID 映射,不是File实例
后端怎么拿到“类似绝对路径”的结构?
前端无法提供,但后端可通过保存逻辑模拟层级路径:
- 用时间戳 + 随机数重命名文件,避免冲突:
"20260630235712_abc123.pdf" - 按日期建子目录:
/uploads/2026/06/30/20260630235712_abc123.pdf - 前端接收后端返回的
res.data.filePath(如"/static/uploads/20260630235712_abc123.pdf"),这是服务端可控的“逻辑路径”,不是客户端本地路径 - 若需溯源原始文件名,后端应单独存
original_name字段(来自file.getOriginalFilename()或request.files['file'].filename)
真正容易被忽略的是:有人试图用 obj.preview() 读取 file.name,结果发现大文件下回调里的 file 对象 name 丢失——因为 preview 内部依赖 FileReader,失败时 fallback 不完整。要名字和大小,永远只信 obj.files[i].name 和 obj.files[i].size,别的都是绕远路。


















