对象解构不能直接提取文件元数据,需先通过或拖放api获取file对象再解构;file对象提供name、size、type、lastmodified等属性,但无法获取本地路径。

JavaScript 中对象解构本身不能直接提取文件上传的元数据,它只是从已有对象中提取属性值的语法;真正获取文件元数据(如文件名、大小、类型、最后修改时间等)需要先通过 <input type="file"> 或拖放 API 获取 File 对象,再对这个对象进行解构。
从 input 元素获取 File 并解构元数据
用户选择文件后,input.files 返回一个 FileList,其中每个项是 File 实例(继承自 Blob),具备如下常用属性:
- name:文件名(含扩展名)
- size:字节大小(number)
-
type:MIME 类型(如
"image/png",可能为空字符串) - lastModified:最后修改时间戳(毫秒数)
-
lastModifiedDate:已废弃,建议用
lastModified配合new Date()
可直接对单个 File 对象解构:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
const input = document.querySelector('input[type="file"]');
input.addEventListener('change', (e) => {
const file = e.target.files[0];
if (!file) return;
<p>// 解构提取元数据
const { name, size, type, lastModified } = file;</p><p>console.log({ name, size, type, lastModified });
// → { name: "photo.jpg", size: 245678, type: "image/jpeg", lastModified: 1712345678900 }
});
</p>批量处理多个文件并解构
若支持多选(multiple),可用展开运算符转为数组,再用 map + 解构批量提取:
input.addEventListener('change', (e) => {
const files = Array.from(e.target.files); // 转为真实数组
const metadata = files.map(({ name, size, type, lastModified }) => ({
name,
size,
type,
lastModified,
lastModifiedTime: new Date(lastModified) // 可选:转为 Date 实例
}));
<p>console.log(metadata);
});
</p>注意:解构无法获取“路径”或“本地绝对路径”
出于安全限制,浏览器**禁止 JavaScript 访问用户文件的真实本地路径**。无论是否解构,file.name 只返回基础文件名(如 "report.pdf"),不会包含 C:\Users\...\ 或 /home/user/...。试图解构 path、webkitRelativePath(仅在特定拖放场景下存在且非标准)等属性不可靠,不应依赖。
结合 FormData 上传时保留元数据
解构出的元数据常用于上传前校验或展示。上传时仍需将原始 File 对象传入 FormData:
const { name, size, type } = file;
<p>// 校验示例
if (size > 5 <em> 1024 </em> 1024) {
alert('文件不能大于 5MB');
return;
}</p><p>// 上传:仍用原始 file 对象
const formData = new FormData();
formData.append('upload', file); // ← 必须是 file,不是解构后的普通对象
formData.append('filename', name); // 可额外附带解构出的字段</p><p>fetch('/api/upload', { method: 'POST', body: formData });
</p>Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










