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

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

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

Contoh di halaman ini didasarkan pada fungsi sampel yang terpicu saat file gambar diupload ke Cloud Storage. Contoh fungsi ini menunjukkan cara mengakses atribut peristiwa, cara mengunduh 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 mencakup fungsi Anda ke bucket Cloud Storage tertentu atau menggunakan bucket default, gunakan salah satu dari berikut ini:

Misalnya, contoh pembuat gambar mini dicakupkan ke keranjang default untuk proyek:

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

Cloud Storage mendukung peristiwa ini:

  • onArchive Hanya terkirim 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 sebuah objek telah dihapus secara permanen. Ini termasuk objek yang ditimpa atau dihapus sebagai bagian dari konfigurasi siklus proses bucket . Untuk bucket dengan versi objek yang diaktifkan, ini tidak dikirim saat objek diarsipkan (lihat onArchive ), meskipun pengarsipan terjadi melalui metode storage.objects.delete .
  • onFinalize Terkirim ketika objek baru (atau generasi baru dari objek yang ada) berhasil dibuat di bucket. Ini termasuk menyalin atau menulis ulang objek yang ada. Unggahan yang gagal tidak memicu peristiwa ini.
  • onMetadataUpdate Dikirim ketika metadata dari objek yang ada berubah.

Setel acara di dalam pengendali acara on seperti yang ditunjukkan di atas untuk onFinalize .

Akses atribut objek Cloud Storage

Cloud Functions mengekspos sejumlah atribut objek Cloud Storage seperti size dan contentType untuk file yang diperbarui. Atribut 'metageneration' 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 di mana fungsi kembali:

// 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, mungkin tidak perlu mendownload file dari Cloud Storage. Namun, untuk melakukan tugas intensif seperti membuat gambar mini dari file yang disimpan di Cloud Storage, Anda perlu mengunduh file ke instance fungsi—yaitu, mesin virtual yang menjalankan kode Anda.

Untuk mengunduh dan mengunggah 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 gambar mini dalam sampel, juga import 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 ini adalah contoh cara membuat gambar mini 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 mengeksekusi convert program baris perintah ImageMagick untuk membuat gambar mini 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 pemicu Google Cloud Storage lengkap untuk informasi selengkapnya.