1

Firebaseストレージとリアルタイムデータベースを使用して、それぞれイメージとそのダウンロードURLを保存しています。ファイル名はランダムに生成され、ダウンロードURLが生成され、リアルタイムデータベースに保存されます。Firebaseストレージイメージの削除ダウンロードURL付き

シナリオ:ユーザーが新しい画像をアップロードした場合(たとえばプロフィール画像の場合)、downloadImageurlのヘルプを使用して古い画像を削除したい場合(画像が最初にアップロードされ、同じものがリアルタイムデータベースに保存されます)どのように古いイメージを削除することができますか?私は以下のコードを試しましたが、動作させるためにはファイル名を取得する必要があります。あなたが欲しいものに応じて

gcs 
      .bucket("e**********.appspot.com") // find it in Firebase>Storage>"gs://...." copy without gs 
      //or go to console.cloud.google.com/ buckets and copy name 
      .file("images/" +event.params.uid+"/"+filename) //file location in my storage 
      .delete() 
      .then(() => { 
       console.log(`gs://${bucketName}/${filename} deleted.`); 
      }) 
      .catch(err => { 
       console.error('ERROR-DELETE:', err+ " filename: "+filename); 
      }); 
+0

このコードをクラウド機能で実行していますか? Google Cloud StorageノードAPIを使用していますか?ここで何が起こっているのかについてより多くの文脈を提供すれば役に立つかもしれません。 –

+0

@DougStevensonはい私は雲機能を使用しています。更新された質問を見つけてください。 – Rohit

+0

私はconst gcs = require( '@ google-cloud/storage')()を使用しています。 githubチュートリアルに従ってサムネイル画像を生成しました。これに関する助けがさらに進んでいくと助かります – Rohit

答えて

0

  1. は、元の画像を維持し、将来的には手動で削除することができるという。
  2. サムネイルが生成された直後に削除します。

私はあなたのDBにファイルパスを指定して保存する必要がありますがthis example

1-使用しているとします。そして、あなたは正面からそれを削除したいとき:

import * as firebase from 'firebase'; 
... 
const store = firebase.storage().ref(); 
// Depending on which db you use and how you store, you get the filePath and delete it: 
store.child(image.filePath).delete(); 

2-が、このようなfirebase機能からの約束を続行:

// ...LAST PART OF THE EXAMPLE... 
.then(() => {  
// Add the URLs to the Database 
return admin.database().ref('images').push({path: fileUrl, thumbnail: thumbFileUrl}); 
}).then(() => { 
// ...PART YOU CAN ADD TO DELETE THE IMAGE UPLOADED 
const bucket = gcs.bucket(bucket); 
bucket.file(filePath).delete(); 
}) 

"バケット" 以前に作成したのconstです:

const bucket = gcs.bucket(event.data.bucket); 

だけでなく、 "filePathに":

const filePath = event.data.name; 
1

これが正しい方法であるかどうかわかりません。ダウンロードURLを使用して削除しようとしましたが、正しく動作しません。

コード

import * as firebase from 'firebase'; 
... 
let name = imagePath.substr(imagePath.indexOf('%2F') + 3, (imagePath.indexOf('?')) - (imagePath.indexOf('%2F') + 3)); 
name = name.replace('%20',' '); 
let storagePath = firebase.storage().ref(); 
storagePath.child(`images/${name}`).delete(); 

このコードはURLからファイル名を取得し、そのファイルを削除します。現在、このソリューションは私のために働く!

関連する問題