【发布时间】:2019-01-24 17:33:15
【问题描述】:
在我的 Angular 应用程序中,我试图检索保存在 firebase 存储中的文件。
为此我写了如下代码:
var storage = firebase.storage();
var fileRef = storage.ref(`${this.idOfCurrentUser}/personalData.card`);
var blob = null;
console.log("THIS LINE DOES GET PRINTED");
fileRef.getDownloadURL().then(function(url) {
console.log("THIS LINE NEVER GETS PRINTED");
var xhr = new XMLHttpRequest();
xhr.responseType = 'blob';
xhr.onload = function(event) {
blob = xhr.response;
};
xhr.open('GET', url);
xhr.send();
}).then(function() {
//some more code
}).catch(function(error) {
console.log(error);
});
此代码遵循 firebase (https://firebase.google.com/docs/storage/web/download-files) 的文档...但它不起作用。
具体来说,程序在以下行停止:
fileRef.getDownloadURL().then(function(url) {
控制台中没有错误消息。但是车轮永远转动,整个应用程序变得无法使用。
有人知道从 Firebase 存储中检索文件的有效方法吗?
更新:
根据 Joseph Webber 的建议,我将代码的第一行更改为以下内容:
var storage = firebase.storage();
var id = this.idOfCurrentUser;
var fileRef = storage.ref(`${id}/personalData.card`);
但是,问题依旧。
更新2:
根据 Joseph Webber 的另一个建议,我还尝试了以下方法:
var fileRef = storage.child(`${id}/personalData.card`);
但是,这会给出以下错误消息:
"Property 'child' does not exist on type 'Storage'"
更新3:
也试过这个:
var fileRef = storage.ref(this.idOfCurrentUser + "/personalData.card");
...也没有什么不同
P.S.:存储规则如下:
【问题讨论】:
-
你的存储规则是什么样的?
-
见附注。到我的帖子
-
不使用模板字面量是否有效?
storage.ref(this.idOfCurrentUser + '/personalData.card')你确定路径正确(idvsuid)并且文件存在吗? -
应该,因为这些字符都不受目录名称的限制。可以肯定的是,尝试在 firestore 中创建一个测试目录和文件,名称中不包含特殊字符,并将路径硬编码到新的 firestore ref 中。如果这不起作用,我建议检查您的 firebase 环境变量以确保路径正确。
标签: angular typescript firebase firebase-storage