You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中如何获取FileList对象中的文件名?

解决FileList中获取文件名的问题

问题根源

  1. 状态存储错误:你直接将event.target.files(这是一个FileList类数组对象)存入了filepath数组,导致数组里存储的是整个FileList对象,而非单个File实例。
  2. 遍历方式错误:for...in循环遍历的是对象的可枚举属性名,对于FileList来说,这些属性名就是索引字符串(如"0"、"1"),而非File对象,所以你尝试file[0].name自然会得到undefined。

修复步骤

1. 修正文件状态存储逻辑

在handleUpload中,将FileList转换为真正的数组,把每个File对象单独存入状态:

const handleUpload = (event) => {
  // 用扩展运算符将FileList转为数组,再合并到现有状态
  setFilepath(prev => [...prev, ...event.target.files]);
}

这里使用函数式更新prev => ...是因为setState是异步操作,确保每次更新都基于最新的状态值。

2. 正确遍历获取文件名

在handleSubmit中,直接遍历存储的File对象数组,用for...of或者forEach:

const handleSubmit = async (e) => {
  e.preventDefault();
  console.log(filepath);
  // 遍历每个File对象
  for (const file of filepath) {
    console.log("files are: " + file.name);
  }
  // 或者用forEach
  // filepath.forEach(file => console.log("files are: " + file.name));
}

完整修正后的RawForm组件

const RawForm = () => {
  const [filepath, setFilepath] = useState([]);

  const handleUpload = (event) => {
    setFilepath(prev => [...prev, ...event.target.files]);
  };

  const handleSubmit = async (e) => {
    e.preventDefault();
    console.log(filepath);
    for (const file of filepath) {
      console.log("files are: " + file.name);
    }
  };

  return (
    <>
      <Upload onUpload={handleUpload}/>
      <Submit onSubmit={handleSubmit}/>
    </>
  );
};

额外提示

  • 如果需要支持多次上传且不重复添加相同文件,可以在存入状态前做去重处理(比如通过文件名或文件唯一标识)。
  • 后续发送给后端API时,可以直接从每个File对象中提取name、size等信息,或者将File对象用于FormData上传。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 11:22:33