无法从Firebase存储(JavaScript)获取下载链接

时间:2020-06-30 05:16:09

标签: javascript firebase firebase-storage

我已经成功编写了将图像上传到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)

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

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

1 个答案:

答案 0 :(得分:0)

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

魔术线:

        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
        });
    });
}