我已经成功编写了将图像上传到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'不存在。
答案 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
});
});
}