2017-07-11 20 views
2

URLを使用してFirebase Cloud Storageにファイルへの参照を格納しています。ファイヤーベースのクライアントコードでは、firebase.storage().refFromURL(photo.image)に電話をかけて実際のストレージ参照を取得し、それを使ってコールを削除するなどの便利なことを行うことができます。クラウド機能(具体的にはリアルタイムデータベーストリガー)で同じことを達成するにはどうすればよいですか?私はそれらを参照するオブジェクトを削除した後でイメージをクリーンアップできるようにしたい。Firebase Cloud関数でrefFromURLを呼び出す方法

あなたはクラウド機能はベータですので、 https://firebase.google.com/docs/functions/gcp-storage-events
クラウド機能は、クライアントと同じ機能を提供しないことがあり、これをチェックアウトするクラウド機能にクラウドストレージの使用方法については、管理SDK https://firebase.google.com/docs/database/admin/start
を使用することができ、クラウド機能からデータベースの複雑なアクションについては

答えて

-1

今、人々はまだそれに取り組んでいます。

0

クラウド機能では、ファイルをストレージから削除するには、ファイルのバケット名とファイル名(パスを含む)が必要です。これらはクライアント側でストレージ参照から取得できます。たとえば、JS Storage Referenceは、プロパティーbucketfullPathを持っています。ストレージ参照の文字列表現は、gs://example-12345.appspot.com/path/to/fileという形式です。バケットはexample-12345.appspot.com、ファイル名はpath/to/fileです。

以下に示す例のクラウド機能では、クライアントはバケットとファイル名をトリガロケーションの子として提供することが期待されます。また、URL文字列をトリガの場所に書き込んだ後、クラウド機能のバケットとファイル名のコンポーネントに分割することもできます。

このコードは、Cloud Storage guideの例に基づいています。

const functions = require('firebase-functions'); 
const gcs = require('@google-cloud/storage')(); 
const admin = require('firebase-admin'); 
admin.initializeApp(functions.config().firebase); 


exports.deleteFile = functions.database.ref('/test').onWrite(event => { 
    const bucket = event.data.child('bucket').val(); 
    const filename = event.data.child('filename').val(); 

    console.log('bucket=', bucket, 'filename=', filename); 

    return gcs.bucket(bucket).file(filename).delete().then(() => { 
    console.log(`gs://${bucket}/${filename} deleted.`); 
    }).catch((err) => { 
    console.error('ERROR:', err); 
    }); 

}); 
+0

同じデータを複数表現するのを避けようとしていました。クライアントはあなたがURLからストレージのリファレンスに行くことを可能にして、私はサーバが同じことを望んでいた... –

+0

@GregGilley:私はかなりcliend側ストレージrefと同等のサーバ側のオブジェクトがないと確信しています。しかし、あなたが[ref](toString())(https://firebase.google.com/docs/reference/js/firebase.storage.Reference#toString)をストレージのrefで使用し、それをあなたのDBに格納するなら、それを分割することができますファイルを削除するために必要なバケットと名前を取得します。 –

関連する問題