Ikuti semua informasi yang diumumkan di Firebase Summit, dan pelajari bagaimana Firebase dapat membantu Anda mempercepat pengembangan aplikasi dan menjalankan aplikasi dengan percaya diri. Pelajari Lebih Lanjut

Pemicu Penyimpanan Cloud

Anda dapat memicu fungsi sebagai respons terhadap pengunggahan, pembaruan, atau penghapusan file dan folder di Cloud Storage.

Contoh di halaman ini didasarkan pada contoh fungsi yang dipicu saat file gambar diunggah ke Cloud Storage. Contoh fungsi ini menunjukkan cara mengakses atribut peristiwa, cara mendownload file ke instance Cloud Functions, dan dasar-dasar lain dalam menangani peristiwa Cloud Storage.

Untuk contoh kasus penggunaan lainnya, lihat Apa yang dapat saya lakukan dengan Cloud Functions?

Memicu fungsi pada perubahan Cloud Storage

Gunakan functions.storage untuk membuat fungsi yang menangani peristiwa Cloud Storage. Bergantung pada apakah Anda ingin membatasi fungsi ke bucket Cloud Storage tertentu atau menggunakan bucket default, gunakan salah satu cara berikut:

Misalnya, contoh pembuat thumbnail dicakupkan ke bucket default untuk project:

exports.generateThumbnail = functions.storage.object().onFinalize(async (object) => {
  // ...
});

Cloud Storage mendukung peristiwa berikut:

  • onArchive Hanya dikirim saat bucket telah mengaktifkan pembuatan versi objek . Peristiwa ini menunjukkan bahwa versi langsung dari suatu objek telah menjadi versi yang diarsipkan, baik karena diarsipkan atau karena ditimpa oleh unggahan objek dengan nama yang sama.
  • onDelete Dikirim ketika objek telah dihapus secara permanen. Ini mencakup objek yang ditimpa atau dihapus sebagai bagian dari konfigurasi siklus hidup bucket . Untuk bucket dengan versi objek diaktifkan, ini tidak dikirim saat objek diarsipkan (lihat onArchive ), bahkan jika pengarsipan terjadi melalui metode storage.objects.delete .
  • onFinalize Terkirim saat objek baru (atau generasi baru dari objek yang sudah ada) berhasil dibuat di bucket. Ini termasuk menyalin atau menulis ulang objek yang sudah ada. Pengunggahan yang gagal tidak memicu peristiwa ini.
  • onMetadataUpdate Dikirim ketika metadata dari objek yang ada berubah.

Tetapkan acara di dalam on event handler seperti yang ditunjukkan di atas untuk onFinalize .

Mengakses atribut objek Cloud Storage

Cloud Functions memperlihatkan sejumlah atribut objek Cloud Storage seperti size dan contentType untuk file yang diperbarui. Atribut 'metagenerasi' bertambah setiap kali ada perubahan pada metadata objek. Untuk objek baru, nilai metageneration adalah 1 .

const fileBucket = object.bucket; // The Storage bucket that contains the file.
const filePath = object.name; // File path in the bucket.
const contentType = object.contentType; // File content type.
const metageneration = object.metageneration; // Number of times metadata has been generated. New objects have a value of 1.

Contoh pembuatan gambar mini menggunakan beberapa atribut ini untuk mendeteksi kasus keluar yang mengembalikan fungsi:

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

// Get the file name.
const fileName = path.basename(filePath);
// Exit if the image is already a thumbnail.
if (fileName.startsWith('thumb_')) {
  return functions.logger.log('Already a Thumbnail.');
}

Unduh, ubah, dan unggah file

Untuk beberapa kasus, mengunduh file dari Cloud Storage mungkin tidak diperlukan. Namun, untuk melakukan tugas intensif seperti membuat gambar mini dari file yang disimpan di Cloud Storage, Anda perlu mendownload file ke instance fungsi—yaitu, mesin virtual yang menjalankan kode Anda.

Untuk mendownload dan mengupload ulang objek ke Cloud Storage dengan mudah, instal paket Google Cloud Storage menggunakan npm install --save @google-cloud/storage , dan impor. Untuk menggunakan janji JavaScript untuk menangani proses eksternal seperti tugas pemrosesan thumbnail dalam sampel, impor juga child-process-promise :

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp()
const spawn = require('child-process-promise').spawn;
const path = require('path');
const os = require('os');
const fs = require('fs');

Gunakan gcs.bucket.file(filePath).download untuk mendownload file ke direktori sementara di instance Cloud Functions Anda. Di lokasi ini, Anda dapat memproses file sesuai kebutuhan, lalu mengunggahnya ke Cloud Storage. Saat melakukan tugas asinkron, pastikan Anda mengembalikan janji JavaScript di panggilan balik Anda.

Contoh: transformasi gambar

Cloud Functions menyediakan program pemrosesan gambar yang disebut ImageMagick yang dapat melakukan manipulasi pada file gambar grafis. Berikut adalah contoh cara membuat gambar thumbnail untuk file gambar yang diunggah:

// 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});
functions.logger.log('Image downloaded locally to', tempFilePath);
// Generate a thumbnail using ImageMagick.
await spawn('convert', [tempFilePath, '-thumbnail', '200x200>', tempFilePath]);
functions.logger.log('Thumbnail created at', tempFilePath);
// We add a 'thumb_' prefix to thumbnails file name. That's where we'll upload the thumbnail.
const thumbFileName = `thumb_${fileName}`;
const thumbFilePath = path.join(path.dirname(filePath), thumbFileName);
// Uploading the thumbnail.
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);

Kode ini menjalankan convert program baris perintah ImageMagick untuk membuat gambar mini berukuran 200x200 untuk gambar yang disimpan di direktori sementara, lalu mengunggahnya kembali ke Cloud Storage.

Jelajahi lebih banyak contoh

Lebih banyak contoh fungsi transformasi media umum termasuk transcoding gambar , memoderasi konten , mengekstrak metadata EXIF . Daftar lengkap contoh tersedia di GitHub.

Lihat dokumentasi lengkap pemicu Google Cloud Storage untuk informasi lebih lanjut.