2017-08-22 11 views
0

Firebase機能を使用してイメージのfileNameをダウンロードしてアップロードすることなく変更する方法はありますか?Firebase関数は、ストレージにアップロードされたファイルのfileNameを変更します

私はonChange Listenerを使用して実際のアップロードをキャッチしていますが、アップロードしたファイルについて必要なすべてのデータを取得していますが、ダウンロードすることなく情報を変更することはできません。

私の現在のコード:

const functions = require('firebase-functions'); 
const path = require('path'); 

exports.addTimeStamp = functions.storage.object().onChange(event => { 
const object = event.data; // The Storage bucket that contains the file. 
const filePath = object.name; // File path in the bucket. 
const contentType = object.contentType; // File content type. 
const resourceState = object.resourceState; // The resourceState is 'exists' or 'not_exists' (for file/folder deletions). 
const metageneration = object.metageneration; // Number of times metadata has been generated. New objects have a value of 1. 

// Exit if this is triggered on a file that is not an image. 
if (!contentType.startsWith('image/')) { 
    console.log('This is not an image.'); 
    return; 
} 

if (!filePath.startsWith('deliveryNote/')) { 
    console.log('This is not a delivery note.'); 
    return; 
} 

// Get the file name. 
const fileName = path.basename(filePath); 
console.log('filename: ' + fileName); 
// Exit if the image is already a thumbnail. 
if (fileName.startsWith('note_')) { 
    console.log('Already modified'); 
    return; 
} 

// Exit if this is a move or deletion event. 
if (resourceState === 'not_exists') { 
    console.log('This is a deletion event.'); 
    return; 
} 

// Exit if file exists but is not new and is only being triggered 
// because of a metadata change. 
if (resourceState === 'exists' && metageneration > 1) { 
    console.log('This is a metadata change event.'); 
    return; 
} 

///////////////////////////////////////////////////////////// 
//Added folowing code thx to Doug Stevenson 
const bucket = gcs.bucket(object.bucket); 
var file = bucket.file(filePath); 
console.log('filepath: ' + filePath); 
console.log('filename: ' + fileName); 
const dirname = path.dirname(filePath); 
file.move(dirname + '/' + 'note_' + fileName, function(err, destinationFile, apiResponse) { 
}); 
////////////////////////////////////////////////////////////// 
}); 

答えて

0

ストレージバケット内のファイルと対話するために、あなたはGoogle Cloud Storage Node SDKを使用することができます。これを使用して、変更されたファイルを表すFileオブジェクトを取得し、moveメソッドを使用して名前を変更します。

+0

私のSparkプランでCloudストレージを使用できますか? そして、moveメソッドが上のように同じことをして、新しいファイルを作成し、古いファイルを削除するように見えます。 –

+0

これは、指定したストレージの名前とパスのみを変更します。ローカルではダウンロードされません。 スパークプランの制限は、https://firebase.google.com/pricing/ –

+0

に記載されています。 –

関連する問題