代码:
"core-js": "^2.4.1",
我的文件已成功上传到我的firebase存储,但是:
var storage = require('@google-cloud/storage');
var gcs = storage({
projectId: config.google.projectId,
keyFilename: config.google.keyFilenameFirebase
});
var bucket = gcs.bucket('project-id.appspot.com');
var destination = 'uploads/12345/full.jpg';
bucket.upload(myFile, { public: true, destination: destination }, function(err, file) {
if (err) {
console.log(err);
}
});
似乎打破了Firebase存储UI:未显示右侧图像的预览,我无法通过下载按钮下载图像。此外,没有下载网址(我不介意,因为我可以通过上面的链接访问它)和点击“创建新的下载网址”Firebase收益
生成下载网址时出错
删除public: true
时,预览显示正确,我也可以生成下载网址。但公共网址https://storage.googleapis.com/project-id.appspot.com/uploads/12345/full.jpg将不再适用,这对我来说是必要的。
所以我的计划是坚持public: true
,但它仍然让我感到困惑,预览/下载按钮不起作用,它看起来像Firebase中的一个错误。任何人都可以确认吗?
答案 0 :(得分:4)
1)只要它总是公开的,它就不会过期。 (我在底部添加了与此相关的链接)
2)这是快速修复。 (您可以执行以下任一操作)
gsutil defacl ch -u your_email@mail.com:OWNER gs:// your_bucket;
然后重新上传你的文件......
<强> TL; DR 强>
,这就是原因您可以使用Google云端存储API访问通过上传的文件 适用于云存储的Firebase SDK,尤其适用于执行更复杂的操作 操作,例如复制或移动文件,或列出所有文件 可以参考。
请注意,这些请求使用Google云端存储非常重要 ACL或项目级别IAM,而不是Firebase身份验证和 存储安全规则。
关于public:true
,我认为它只会启用和创建公共链接。请参阅here
答案 1 :(得分:2)
您的网址不应更改或过期,并且在撤消之前它们应该有效,这可以通过对象更新发生,也可以通过在firebase网络控制台中明确撤销网址来实现。至少据我所知。
首先我想到的是:你有没有在桶上配置CORS?这可能是一个原因。 Check this out
我能想到的第二件事是存储规则。如果您有类似allow read: if request.auth.uid == userId;
的内容,则可能需要删除这些内容以使文件可公开访问。您可以使用类似的方法将路径中的所有文件设为公共:
service firebase.storage {
match /b/XXXXXX.appspot.com/o {
match /{allPaths=**} {
allow read;
}
}
如果你已经完成了这两件事,那么不幸的是它实际上也可能是一个firebase错误。祝你好运!