2017-10-30 8 views
0

イメージをfirebaseストレージにアップロードし、firebaseデータベースにリンクを保存します。データベースへのリンクを保存するのは何らかの理由で失敗する可能性があり、ストレージ内に未使用のリンクされていないイメージがあります。どういうわけか画像へのアップロードリンクがデータベースに保存されていることを確認することは可能ですか?イメージをfirebaseストレージにアップロードし、データベース内の参照を単一のトランザクションで保存する方法はありますか?

答えて

2

これは、トランザクションを使用する以外の方法です。 Firebase Cloud Functions Storage Triggerを使用できます。アップロードされた画像のダウンロードURLを取得し、それをfirebaseデータベースにプッシュするクラウド機能を記述することができます。

Check this video by firebase about Cloud Function Storage Trigger

+0

これはこれまでのところ最良の解決策ですが、トリガー自体が何らかの理由で失敗する可能性がありますが、その確率はユーザーのブラウザを閉じるなどと比べてずっと低いです。 – Aleksey

+1

私はAndroidアプリでクラウド機能を使用しています。私はトリガーが今まで失敗したときには、決してカカシを持っていません。 –

0

はい、あなたはこのようなあなたの仕事に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を足すされていることを意味します。

+0

私の問題は異なります。これは、 'データベースへの更新と共に画像のみをアップロードする'です。したがって、どちらかが成功するか両方が失敗します。 – Aleksey

+0

そのため、2つの別々の操作を行う必要があります。あなたが求めていたものではありませんか?アップロードに失敗すると、データベースに何も書き込まれず、アップロードが成功した場合にのみ、URLがデータベースに書き込まれます。また、データを書き込むときに 'addOnCompleteListener()'を使うこともできます。 –

+0

アップロードが成功すると、何らかの理由でURLがデータベースに書き込まれず(ユーザーがブラウザを閉じたとします)、どこにも参照されていないストレージ内にイメージがあります。 – Aleksey

2

私はあなたがイメージがfirebaseでアップロードを取得するために、storageRefからURLを取得し、以下のようにデータベースにURLをプッシュ待つことをお勧め。 私はjavascriptメソッドを使用しています、あなたはあなたのニーズを達成するためのアイデアを得ることを願っています。 JSファイルで

<input type="file" value="" name="Photo" class="btn btn-info" id="fileButton" accept="image/*"> //html Code 

、私はこれがあなたの役に立てば幸い

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

のようにイベントリスナーを追加し、これは、単一のトランザクションで行われます。

関連する問題