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

Firebase Cloud Storage文件上传出现TypeError路径读取错误求助

问题根源

你混用了Firebase客户端存储SDK(firebase/storage)和Firebase Admin存储SDK(firebase-admin/storage)的API。客户端SDK的ref()函数无法识别Admin SDK返回的Storage实例,导致内部无法读取_location.path,触发了类型错误。

解决方案

在Firebase Functions场景下,优先使用Admin SDK处理存储操作(默认使用服务账号权限,无需额外认证),以下是修正后的代码:

const { initializeApp } = require('firebase-admin/app');
const { getStorage } = require('firebase-admin/storage');

const firebaseConfig = {...}
const firebaseApp = initializeApp(firebaseConfig);
const storage = getStorage(firebaseApp);

const uploadImagesToFirebase = async () => {
    try {
        // 获取默认存储桶,如需指定桶名可传入参数:storage.bucket('your-custom-bucket')
        const bucket = storage.bucket();
        // 上传本地文件到Storage的images目录下
        const uploadResponse = await bucket.upload(
            '/Users/donovancotter/Desktop/Projects/image-uploaded/functions/public/37f8eb5d-8b42-45ed-ba3b-c7d35a299a62-0-1111264718.png',
            {
                destination: 'images/37f8eb5d-8b42-45ed-ba3b-c7d35a299a62-0-1111264718.png'
            }
        );
        return uploadResponse;
    } catch (e) {
        console.log(e);
    }
};

若你坚持使用客户端SDK(不推荐在Functions环境中使用),需确保全程使用客户端API,且uploadBytes不接受本地文件路径,需传入文件Buffer:

const { ref, uploadBytes, getStorage } = require('firebase/storage');
const { initializeApp } = require('firebase/app');
const fs = require('fs');

const firebaseConfig = {...}
// 初始化客户端Firebase App,而非Admin App
const firebaseApp = initializeApp(firebaseConfig);
const storage = getStorage(firebaseApp);

const uploadImagesToFirebase = async () => {
    const storageRef = ref(storage, 'images/37f8eb5d-8b42-45ed-ba3b-c7d35a299a62-0-1111264718.png');
    
    try {
        // 读取本地文件为Buffer
        const fileBuffer = fs.readFileSync('/Users/donovancotter/Desktop/Projects/image-uploaded/functions/public/37f8eb5d-8b42-45ed-ba3b-c7d35a299a62-0-1111264718.png');
        const upload = await uploadBytes(storageRef, fileBuffer);
        return upload;
    } catch (e) {
        console.log(e);
    }
};
关键注意点
  • 两种Firebase存储SDK的API体系完全独立,绝对不能混用;
  • Functions环境中Admin SDK是更合适的选择,无需处理用户认证,权限控制更灵活;
  • 客户端SDK的uploadBytes仅接受Buffer/Blob类型的文件内容,不支持直接传入本地路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:25:51