我想将图片上传到firebase存储并保存firebase数据库中的链接。保存到数据库的链接可能因任何原因失败,然后我在存储中有未使用的,未链接的图像。是否有可能以某种方式确保上传链接到图像后保存在数据库中?
答案 0 :(得分:1)
是的,您可以在此任务中使用addOnSuccessListener
:
uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Uri downloadUrl = taskSnapshot.getDownloadUrl();
firebaseRef.child("urls").child("urlId1").setValue(downloadUrl.toString);
}
});
这意味着只有在上传成功后,您才会将URL写入数据库。
答案 1 :(得分:1)
这是除了使用事务之外的另一种方法。您可以使用Firebase云功能存储触发器。您可以编写云功能来获取上传图像的下载URL,然后将其推送到firebase数据库。
Check this video by firebase about Cloud Function Storage Trigger
答案 2 :(得分:1)
我建议您等待图片上传到firebase中,从storageRef获取URL,然后将Url推送到数据库中,如下所示。 我使用javascript方法,希望您能了解如何满足您的需求。
<input type="file" value="" name="Photo" class="btn btn-info" id="fileButton" accept="image/*"> //html Code
在js文件中,添加类似
的事件监听器var fileButton = document.getElementById('fileButton');
fileButton.addEventListener("change",function(e){
var file= e.target.files[0];
//create storage ref to the firebase storage
var storageRef = firebase.storage().ref('your Path Name').child(file.name);
var task = storageRef.put(file);
task.on("state_changed",function(snapshot){
var percentage= snapshot.bytesTransferred/snapshot.totalBytes) *100;
if(percentage==100){
storageRef.getDownloadURL().then(function (url) {
// You will get the Url here.
var firebaseRef=firebase.database().ref("Your path Name);
firebaseRef.push(url).then(function(){
alert("Image Uploaded and also updated to the database");
});
});
}
});
});
我希望这对您有所帮助,这种情况发生在一次交易中。
答案 3 :(得分:1)
这种模式怎么样?
因此,在无法将网址保存到数据库的情况下,该对象将在1天后被删除