Firebase Storage文件上传报错:‘请注意,这可能是生产服务’
Firebase Storage上传文件出现NotFound错误及"Be careful, this may be a production service"提示
问题详情
已按操作创建ServiceAccountKey.json,但向Firebase Storage上传文件时触发异常,提示"Be careful, this may be a production service",同时出现NotFound错误。
环境信息
- Node.js版本:16
- 相关依赖:
cupertino_icons: ^1.0.2 firebase_core: ^1.24.0 firebase_database: ^9.1.6 video_player: ^2.4.7 camera: ^0.10.0+3 cloud_firestore: ^3.5.1 firebase_auth: ^3.11.2 dio: ^4.0.6 flutter_cors: ^1.3.2 convert: ^3.0.2 flutter_signin_button: ^2.0.0 google_sign_in: ^5.4.2 path_provider: ^2.0.2 firebase_storage: ^10.3.11
上传代码
var admin = require("firebase-admin"); var serviceAccount = require("./serviceAccountKey.json"); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: "https://123-default-rtdb.firebaseio.com" }); exports.saveVideoOnStorage = functions.https.onRequest(async (req, res) => { inputFile = '/Users/nativvered/pubspec.yaml'; const myStorage = admin.storage(); const bucket = admin.storage().bucket('gs://123.appspot.com/Files'); await bucket.upload(inputFile); });
异常信息
Google API requested! - URL: "https://www.googleapis.com/oauth2/v4/token" - Be careful, this may be a production service. ⚠ Google API requested! - URL: "https://storage.googleapis.com/upload/storage/v1/b/challenge-me-vn.appspot.com/Videos/o?uploadType=multipart&name=pubspec.yaml" - Be careful, this may be a production service. ⚠ functions: Error: Not Found at new ApiError (/Users/nativvered/Documents/MyFlluter/vered2/functions/node_modules/@google-cloud/storage/build/src/nodejs-common/util.js:78:15) at Util.parseHttpRespMessage (/Users/nativvered/Documents/MyFlluter/vered2/functions/node_modules/@google-cloud/storage/build/src/nodejs-common/util.js:180:41) at Util.handleResp (/Users/nativvered/Documents/MyFlluter/vered2/functions/node_modules/@google-cloud/storage/build/src/nodejs-common/util.js:154:76) at /Users/nativvered/Documents/MyFlluter/vered2/functions/node_modules/@google-cloud/storage/build/src/nodejs-common/util.js:500:22 at onResponse (/Users/nativvered/Documents/MyFlluter/vered2/functions/node_modules/retry-request/index.js:228:7) at /Users/nativvered/Documents/MyFlluter/vered2/functions/node_modules/teeny-request/build/src/index.js:157:17 at processTicksAndRejections (node:internal/process/task_queues:96:5) ⚠ Your function was killed because it raised an unhandled error.
解决办法
修正Bucket名称格式
代码中bucket('gs://123.appspot.com/Files')的写法错误,Files是Bucket内的文件夹,不是Bucket本身的名称。正确做法是只传入Bucket根名称,上传时通过destination指定文件夹路径:const bucket = admin.storage().bucket('gs://123.appspot.com'); await bucket.upload(inputFile, { destination: 'Files/pubspec.yaml' });另外异常中显示请求的Bucket是
challenge-me-vn.appspot.com,和代码里的123.appspot.com不匹配,需确认Bucket名称是否正确。检查ServiceAccount权限
确认ServiceAccountKey对应的账号拥有Storage Admin或Storage Object Creator权限。可在Firebase控制台「项目设置」→「服务账号」找到对应账号,前往Google Cloud IAM页面为其添加权限。验证本地文件路径
确保inputFile指向的本地文件真实存在,路径无拼写错误。可添加文件存在性检查:const fs = require('fs'); if (!fs.existsSync(inputFile)) { return res.status(400).send('本地文件不存在'); }完善云函数响应逻辑
原函数未返回任何响应,会导致函数被强制终止。上传完成后需返回成功状态:await bucket.upload(inputFile, { destination: 'Files/pubspec.yaml' }); res.status(200).send('文件上传成功');
内容的提问来源于stack exchange,提问作者Nativ Vered
相关产品推荐
相关产品推荐

