【问题标题】:Downloading File from Firebase Storage not working从 Firebase 存储下载文件不起作用
【发布时间】: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') 你确定路径正确(id vs uid)并且文件存在吗?
  • 应该,因为这些字符都不受目录名称的限制。可以肯定的是,尝试在 firestore 中创建一个测试目录和文件,名称中不包含特殊字符,并将路径硬编码到新的 firestore ref 中。如果这不起作用,我建议检查您的 firebase 环境变量以确保路径正确。

标签: angular typescript firebase firebase-storage


【解决方案1】:

从您的模板文字中删除 this.

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

编辑

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

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

【讨论】:

  • 感谢您的评论……但遗憾的是,这并没有什么不同(请参阅我的帖子的更新)
  • 感谢您的建议 - 但它仍然不起作用...请参阅 UPDATE2
【解决方案2】:

好的,我现在解决了。该问题与另一个并行执行的函数中的无限循环有关。

【讨论】:

  • 也许你可以要求退还你的赏金:)
猜你喜欢
  • 1970-01-01
  • 2021-10-23
  • 2019-05-24
  • 2023-04-01
  • 2021-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多