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

ReactJS向Firebase v9 Storage上传图片报storage.ref不是函数求助

解决方案

错误原因

你当前使用的是Firebase v9版本的模块化API,而业务代码中调用Storage的语法是v8版本的链式命名空间写法,两者不兼容,因此触发storage.ref is not a function报错。

具体修改步骤

1. 新增v9 Storage API导入

修改业务代码的导入部分,引入所需的Storage方法:

import React, { useState } from "react";
// 新增导入v9 Storage相关API
import { ref, uploadBytesResumable, getDownloadURL } from "firebase/storage";
import { storage } from "../../firebase/firebase";
import { ActionBtn, Topbar, SubjectHead, CardList } from "../../components/styles";

2. 重写uploadFiles上传逻辑

将原有的v8链式写法替换为v9模块化写法:

const uploadFiles = () => {
  // 等价于v8的storage.ref(`images/${img.name}`)
  const storageRef = ref(storage, `images/${img.name}`);
  // 等价于v8的.put(img),创建支持断点续传的上传任务
  const uploadTask = uploadBytesResumable(storageRef, img);

  uploadTask.on(
    "state_changed",
    (snapshot) => {
      const prog = Math.round(
        (snapshot.bytesTransferred / snapshot.totalBytes) * 100
      );
      setProgress(prog);
    },
    (error) => console.log(error),
    () => {
      // 上传完成后获取文件访问链接
      getDownloadURL(uploadTask.snapshot.ref)
        .then((url) => {
          console.log(url);
          // 后续将url存入数据库等业务逻辑可在此处实现
        });
    }
  );
};

3. 修复代码遗留问题

你当前代码中<ActionBtn onClick={createCv}>绑定的createCv函数未定义,需要补充该函数的实现,否则会触发新的报错。

内容的提问来源于stack exchange,提问作者M-WRI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:06:06