You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Vue拖拽文件报错:Cannot read properties of undefined (reading 'files') 求助

解决拖放MP3时出现的Uncaught TypeError错误

嘿,我一眼就揪出问题所在啦!你遇到的Uncaught TypeError: Cannot read properties of undefined (reading 'files')错误,核心原因是拼写失误——这可是前端开发里超常见的小坑😅

第一步:修复致命拼写错误

在你的upload方法中,把dataTransfer写成了dataTranfser(少了一个s)!这就导致$event.dataTranfserundefined,自然没法读取它的files属性。

把这一行:

const files = [ ...$event.dataTranfser.files];

改成:

const files = [ ...$event.dataTransfer.files];

第二步:让代码更健壮的优化建议

为了避免后续出现其他意外问题,给你几个小调整建议:

  • 添加存在性检查,防止空拖放或异常事件报错:
    upload($event){
      this.isDragover = false;
      // 先确认事件对象里有可读取的文件
      if (!$event.dataTransfer || !$event.dataTransfer.files.length) {
        console.warn("没有检测到可上传的文件哦");
        return;
      }
      const files = [...$event.dataTransfer.files];
      files.forEach((file) => {
        if(file.type !== 'audio/mpeg'){
          console.warn(`${file.name} 不是MP3文件,已跳过上传`);
          return;
        }
        const storageRef = storage.ref();
        const songsRef = storageRef.child(`songs/${file.name}`);
        // 添加上传状态监听,方便排查问题
        songsRef.put(file)
          .then(snapshot => {
            console.log(`${file.name} 上传成功啦!`);
          })
          .catch(error => {
            console.error(`${file.name} 上传失败:`, error);
          });
      });
    }
    
  • 你的拖放事件绑定(@dragend.prevent.stop这类写法)已经很规范了,继续保持就好~

最后验证要点

  1. 修正拼写后,测试拖放MP3文件,应该能正常获取到文件列表了
  2. 确认Firebase Storage已经正确初始化,并且你的项目配置了允许上传audio/mpeg类型文件的存储权限

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

火山引擎 最新活动