クラウド機能では、ファイルをストレージから削除するには、ファイルのバケット名とファイル名(パスを含む)が必要です。これらはクライアント側でストレージ参照から取得できます。たとえば、JS Storage Referenceは、プロパティーbucket
とfullPath
を持っています。ストレージ参照の文字列表現は、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);
});
});
同じデータを複数表現するのを避けようとしていました。クライアントはあなたがURLからストレージのリファレンスに行くことを可能にして、私はサーバが同じことを望んでいた... –
@GregGilley:私はかなりcliend側ストレージrefと同等のサーバ側のオブジェクトがないと確信しています。しかし、あなたが[ref](toString())(https://firebase.google.com/docs/reference/js/firebase.storage.Reference#toString)をストレージのrefで使用し、それをあなたのDBに格納するなら、それを分割することができますファイルを削除するために必要なバケットと名前を取得します。 –