Mar*_*arc 2 google-cloud-storage firebase google-cloud-functions firebase-admin
我使用Firebase云功能为QR文件上传编写了以下代码
const functions = require('firebase-functions');
const qrcode = require('qrcode')
const admin = require('firebase-admin');
const spawn = require('child-process-promise').spawn;
const serviceAccount = require("./secret.json");
const gcs = require('@google-cloud/storage')();
admin.initializeApp(functions.config({
credential: admin.credential.cert(serviceAccount),
storageBucket: "https://SECRET.firebaseio.com"
}));
exports.qrcode = functions.https.onRequest((req, res) => {
const storage = admin.storage().bucket();
const dummyFile = storage.file('dummy.png')
new Promise ((resolve, reject) => qrcode.toFileStream(
dummyFile.createWriteStream()
.on('finish', resolve)
.on('error', reject),
'DummyQR'))
.then(console.log("success")) //Doing stuff here later
.catch(console.log)
res.send("<script>window.close();</script>")
});
Run Code Online (Sandbox Code Playgroud)
根据文档,我应该能够通过简单地调用admin.storage().bucket();(https://firebase.google.com/docs/storage/admin/start)连接到存储桶,但是出现以下错误:
Error: Error occurred while parsing your function triggers.
Error: Bucket name not specified or invalid. Specify a valid bucket name via the storageBucket option when initializing the app, or specify the bucket name explicitly when calling the getBucket() method.
Run Code Online (Sandbox Code Playgroud)
所以我被卡住了,不确定如何进行。如果我尝试手动输入存储桶,则会admin.storage().bucket("https://SECRET.firebaseio.com");收到错误消息
{ ApiError: Not Found
at Object.parseHttpRespBody (/user_code/node_modules/firebase-admin/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/src/util.js:193:30)
at Object.handleResp (/user_code/node_modules/firebase-admin/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/src/util.js:131:18)
at /user_code/node_modules/firebase-admin/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/src/util.js:496:12
at Request.onResponse [as _callback] (/user_code/node_modules/firebase-admin/node_modules/retry-request/index.js:195:7)
at Request.self.callback (/user_code/node_modules/firebase-admin/node_modules/request/request.js:185:22)
at emitTwo (events.js:106:13)
at Request.emit (events.js:191:7)
at Request.<anonymous> (/user_code/node_modules/firebase-admin/node_modules/request/request.js:1157:10)
at emitOne (events.js:96:13)
at Request.emit (events.js:188:7)
code: 404,
errors: [ { domain: 'global', reason: 'notFound', message: 'Not Found' } ],
response: undefined,
message: 'Not Found' }
Run Code Online (Sandbox Code Playgroud)
我有同样的问题。我只是在初始化应用程序时添加了storageBucket名称,如果您使用的是getSignedUrl方法,则需要包括一个服务帐户,否则该网址将在一周后过期(就我而言)。
const serviceAccount = require('/your/service/account/key/path');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
storageBucket: "your-storage-bucket-name.appspot.com",
});
Run Code Online (Sandbox Code Playgroud)
别忘了用更新您的Firebase功能
firebase deploy --only functions
Run Code Online (Sandbox Code Playgroud)
在命令行上
| 归档时间: |
|
| 查看次数: |
1764 次 |
| 最近记录: |