服务器无法找到Firebase Storage默认存储桶问题排查求助
问题修复方案
修正配置读取逻辑
你当前的配置读取存在两个错误:- 从
tokensPlusAuth.txt读取到的存储桶值自带单引号,且带gs://前缀,Firebase Web SDK的storageBucket参数不识别这两种格式,需要先处理 - 建议优化值的读取逻辑,避免换行符、空格干扰
代码修改示例:
let firebaseConfig = { apiKey: tokenINFO[1].trim().replace(/^['"]|['"]$/g, ''), authDomain: tokenINFO[3].trim().replace(/^['"]|['"]$/g, ''), databaseURL: tokenINFO[5].trim().replace(/^['"]|['"]$/g, ''), storageBucket: tokenINFO[9].trim().replace(/^['"]|['"]$/g, '').replace('gs://', '') };- 从
修正Firebase Storage初始化方式
不要直接调用全局的firebase.storage(),要从你初始化得到的app实例获取存储对象,避免多实例冲突导致配置未生效:// 替换原来的 var storage = firebase.storage(); const storage = app.storage();移除重复引入的Firebase SDK
你已经用Browserify把Firebase依赖打包进了bundle.js,index.ejs里又引入了全局版本的Firebase SDK,会造成版本冲突、初始化覆盖,直接删掉index.ejs里这两行即可:
如果需要使用Firestore,直接在<script src="https://www.gstatic.com/firebasejs/8.6.1/firebase-app.js"></script> <script src="https://www.gstatic.com/firebasejs/8.6.1/firebase-firestore.js"></script>script.js中通过require引入即可。修正上传按钮的事件绑定逻辑
你当前的写法会在页面加载时直接执行sendFiles方法,而非点击按钮时才触发,且输入值的读取时机错误、上传参数格式错误:- 输入值要在点击按钮时才读取,避免读取到空的默认值
storage.put()方法仅接收单个File对象,不能直接传入FileList,多文件需要循环遍历上传
代码修改示例:
document.getElementById('uploadBtn').addEventListener('click', () => { const dancerName = document.getElementById('dancerName').value.trim(); const inputFiles = document.getElementById('inputFiles').files; if (!dancerName || inputFiles.length === 0) { alert('请填写舞者名称并选择上传文件'); return; } // 单文件上传直接取第一个文件,多文件自行循环调用sendFiles sendFiles(videosRef, dancerName, inputFiles[0]); });确认静态资源路径配置
你的Express服务配置的静态资源目录是views,需要把tokensPlusAuth.txt放在views目录下,否则fetch请求会404,导致读取到的配置为空。同时建议把请求地址改成绝对路径,避免页面路由变化导致拼接错误:const fileUrl = '/tokensPlusAuth.txt';
内容的提问来源于stack exchange,提问作者Josiah Paintsil
相关产品推荐
相关产品推荐

