Agung
Agung

Reputation: 13803

How to get object from Cloud Storage for Firebase using Cloud Function?

I am sorry. I previously make the same question but it was considered duplicate to this answer . I really don't understand the answer there and I don't understand why that question will answer my problem. it seems very different to me. I need to get image object but the answer there is to create a stream. could someone please help me to relate the answer from there to my problem ? I am new in cloud function. please

=======================================================================

If I use Cloud Functions for Firebase Cloud Storage triggers. I can get the image object like this

exports.compressImage = functions.region("asia-east2").storage.object().onFinalize(async (object) => {
    
   // I can get the `object` easily in here

})

but now I want do something using firestore trigger, and I want to get an object from my bucket in my firestore trigger

exports.dbEventsOnCreate = functions..firestore.document(path).onCreate(async (snapshot,context) => {

    // I want to get an image `object` with a specific path from firebase storage bucket in here

})

and here is the path of my image in firebase storage

gs://xxx.appspot.com/eventPoster/{uid}/{imageID}

enter image description here

so how to get image object from bucket in the path like that inside my cloud function firestore trigger ?

Upvotes: 1

Views: 2047

Answers (1)

Louis C
Louis C

Reputation: 655

To handle the file on the cloud function you can follow this guide you will find more detailed info ut in a few words

To download a file:

// Download file from bucket.
const bucket = admin.storage().bucket(fileBucket);
const tempFilePath = path.join(os.tmpdir(), fileName);
const metadata = {
  contentType: contentType,
};
await bucket.file(filePath).download({destination: tempFilePath});
console.log('Image downloaded locally to', tempFilePath);

That will save the image to a temporary folder since this is what is recomended on the docs.

Use gcs.bucket.file(filePath).download to download a file to a temporary directory on your Cloud Functions instance. In this location, you can process the file as needed.

To upload the file:

await bucket.upload(tempFilePath, {
  destination: thumbFilePath,
  metadata: metadata,
});
// Once the thumbnail has been uploaded delete the local file to free up disk space.
return fs.unlinkSync(tempFilePath);

Upvotes: 2

Related Questions