从Firebase存储下载文件不起作用

时间:2018-08-17 16:14:55

标签: angular typescript firebase firebase-storage

在我的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 Storage检索文件的有效方法吗?


更新:

根据约瑟夫·韦伯的建议,我将代码的第一行更改为以下内容:

    var storage = firebase.storage();
    var id = this.idOfCurrentUser;
    var fileRef = storage.ref(`${id}/personalData.card`);

但是,问题仍然完全相同。


UPDATE2:

根据约瑟夫·韦伯的另一个建议,我还尝试了以下方法:

var fileRef = storage.child(`${id}/personalData.card`);

但是,这会出现以下错误消息:

"Property 'child' does not exist on type 'Storage'"

enter image description here


UPDATE3:

也尝试过:

var fileRef = storage.ref(this.idOfCurrentUser + "/personalData.card");

...也没什么改变


P.S .:存储规则如下:

enter image description here

2 个答案:

答案 0 :(得分:0)

从模板文字中删除this.

var fileRef = storage.ref(`${idOfCurrentUser}/personalData.card`);

修改

尝试将storage.ref更改为storage.child

var fileRef = storage.child(`${id}/personalData.card`);

答案 1 :(得分:0)

Ok I solved it now. The problem was related to an infinite loop in another function that was executed in parallel.