【问题标题】:Unable to get Download Link from Firebase Storage (Javascript)无法从 Firebase 存储 (Javascript) 获取下载链接
【发布时间】:2020-10-20 08:36:54
【问题描述】:

我已成功编写将图像上传到 Firebase 存储的代码,但在尝试获取其下载链接时出错,

我获取下载链接的目的是将其保存到数据库中,然后检索该链接并将其用作图像标签的来源。

完整代码:

 var ImgUrl;
 var ImgName;
    
    function uploader(){
        ImgName =  document.getElementById("namet").value;
        var uploadTask =  firebase.storage().ref('images/'+ImgName+'.png').put(files[0]);
    }

    document.getElementById("ImgUp").onclick = function(){
         uploader();
        
        firebase.storage().ref('images/'+ImgName+'.png').getDownloadURL().then(function(downloadURL) {
        ImgUrl= downloadURL;

        firebase.database().ref("Information/"+ ImgName).set({
            ImageName : ImgName,
            Link : ImgUrl
        });
    });
}

上传成功,我可以在存储中看到正确名称的图像,但无法通过此行并且数据库仍然是

firebase.storage().ref('images/'+ImgName+'.png').getDownloadURL().then(function(downloadURL)

Error1:加载资源失败:服务器响应状态为404()

错误 2:Firebase 存储:对象“images/asd.png”不存在。

【问题讨论】:

  • 能否分享错误截图?
  • 你是直接用firebase还是firebase.app??尝试使用firebase.app.storage()
  • 由于上传器方法执行异步操作。您应该等待它完成然后运行以下代码。
  • Eldar 兄弟就是这样,我要等着看我的答案。

标签: javascript firebase firebase-storage


【解决方案1】:

通过在两者之间放置一个延迟计时器来解决它, 上传(到存储)并保存链接(到数据库)。

魔线:

        const delay = ms => new Promise(res => setTimeout(res, ms)); // make delay

        await delay(10000);//excute delay 10 seconds

完整代码:

    var ImgUrl;
    var ImgName;
    //---------------------------------------------------------------------------//
    const delay = ms => new Promise(res => setTimeout(res, ms)); // make delay
    //---------------------------------------------------------------------------//
    
    function uploader(){
        ImgName =  document.getElementById("namet").value;
        var uploadTask =  firebase.storage().ref('images/'+ImgName+'.png').put(files[0]);
    }

    document.getElementById("ImgUp").onclick =async function(){
        uploader();
    //---------------------------------------------------------------------------//
        await delay(10000);//excute delay
    //---------------------------------------------------------------------------//

        firebase.storage().ref('images/'+ImgName+'.png').getDownloadURL().then(function(downloadURL) {
        ImgUrl= downloadURL;

        firebase.database().ref("Information/"+ ImgName).set({
            ImageName : ImgName,
            Link : ImgUrl
        });
    });
}

【讨论】:

  • 延迟绝不是一个好主意,因为无法保证上传会在您指定的时间内完成。您应该使用 put() 返回的 uploadTask 来确定上传完成的时间。你可以把它当作一个承诺。 firebase.google.com/docs/storage/web/…
猜你喜欢
  • 2021-07-25
  • 2021-03-30
  • 2021-09-09
  • 2022-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多