下面有下面的代码可以将文件从NodeJS上传到防火墙
const admin = require("firebase-admin");
const serviceAccount = require("../service_account.json");
const Strings = require('../lang/strings');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
storageBucket: `${Strings.DEFAULT_BUCKET_NAME}.appspot.com`
});
module.exports = {
firebase: admin
};现在,我将上面的内容导入到以下文件:
const firebase = require("./firebase").firebase;
firebase.storage().bucket(bucketName).upload(uploadPath, {
gzip: true,
metadata: {
cacheControl: 'public, max-age=31536000',
},
}).then((response) => {
console.log("Uploaded to Firebase with response=" + JSON.stringify(response));
fs.unlink(uploadPath, (err, data) => {
});
}).catch((error) => {
console.log("Firebase Upload Error=" + error);
fs.unlink(uploadPath, (err, data) => {
});
});但是上传之后,我得到了以下错误:
Firebase Error=Error: firebase-adminsdk-eveve@xxx.iam.gserviceaccount.com没有storage.objects.create访问Google对象的权限。
我该怎么解决这个问题。我只想简单地将我的文件存储在Firebase存储上。我不想与接口。我想严格地与Firebase仪表板进行接口。
发布于 2021-03-11 12:57:48
根据火基正式文件,您可以使用管理云存储API并上传文件,您的代码如下所示:
const admin = require("firebase-admin");
const serviceAccount = require("../service_account.json");
const Strings = require('../lang/strings');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
storageBucket: `${Strings.DEFAULT_BUCKET_NAME}.appspot.com`
});
var bucket = admin.storage().bucket();
var filename = "PATH.png"
async function uploadFile() {
const metadata = {
metadata: {
cacheControl: 'public, max-age=31536000',
};
// Uploads a local file to the bucket
await bucket.upload(filename, {
// Support for HTTP requests made with `Accept-Encoding: gzip`
gzip: true,
metadata: metadata,
});
console.log(`${filename} uploaded.`);但是,我可以看到,您正在尝试从[消]火基函数上传一个文件到Firebase。请试用以下方法:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp()
exports.uploadFile = functions.https.onRequest((request, response) => {
const bucket = admin.storage().bucket(bucketname);
bucket.upload(tempFilePath, {
// By setting the option `destination`, you can change the name of the
// object you are uploading to a bucket.
destination: destination,
metadata: {
cacheControl: 'public, max-age=31536000',
},
});
});https://stackoverflow.com/questions/66566604
复制相似问题