我已使用admin-sdk上传了用于Firebase的文件,但似乎无法使用Firebase仪表板下载/删除文件。这不一定是问题,因为我不会以这种方式管理文件,但这确实很奇怪。
// Initialization
import * as firebase from 'firebase-admin';
const serviceAccount = require('../firebase_creds');
firebase.initializeApp({
credential: firebase.credential.cert(serviceAccount),
databaseURL: 'https://my-databse.firebaseio.com',
storageBucket: 'gs://my-bucket.appspot.com'
});
export const uploadImages = async () => {
const bucket = firebase.storage().bucket();
try {
const file = await bucket.upload('./images/1-Website.jpg', {
public: true,
destination: `12345/displayPicture/1-Website.jpg`
});
console.log(file);
} catch (error) {
console.log(error);
}
};
答案 0 :(得分:0)
通过将predefinedAcl: 'bucketOwnerFullControl'
传递到上传选项可以解决此问题。像往常一样,firebase文档非常模糊,在任何地方都没有提及。
答案 1 :(得分:0)
我在Google文档中找到了此问题的原因。
简短摘要:“将预定义的ACL publicRead应用到对象后,您将失去OWNER权限,因此不再可以访问对象ACL”
警告:通过将预定义的ACL应用于现有的存储桶或对象, 您将现有的存储桶或对象ACL完全替换为 预定义的ACL。此更改可能会导致您无法访问 在某些情况下,存储桶或对象ACL。例如,如果您在 项目所有者组,但不是对象的所有者 projectPrivate ACL,然后在应用预定义的ACL publicRead之后 该对象,您将失去OWNER权限,因此无法再访问 对象ACL。如果发生这种情况,您可以使用Cloud IAM角色 storage.objectAdmin,以便您具有必要的权限 更新对象的ACL并更正更改。