Google is committed to advancing racial equity for Black communities. See how.
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

ทริกเกอร์ Cloud Storage

คุณเรียกใช้ฟังก์ชันเพื่อตอบสนองต่อการอัปโหลดอัปเดตหรือลบไฟล์และโฟลเดอร์ใน Cloud Storage ได้

ตัวอย่างในหน้านี้อ้างอิงจากฟังก์ชันตัวอย่างที่ทริกเกอร์เมื่อไฟล์ภาพถูกอัปโหลดไปยัง Cloud Storage ฟังก์ชันตัวอย่างนี้สาธิตวิธีเข้าถึงแอตทริบิวต์เหตุการณ์วิธีดาวน์โหลดไฟล์ไปยังอินสแตนซ์ Cloud Functions และพื้นฐานอื่น ๆ ในการจัดการเหตุการณ์ Cloud Storage

ดูตัวอย่างกรณีการใช้งานเพิ่มเติมได้ ที่ฉันสามารถทำอะไรกับ Cloud Functions ได้บ้าง

ทริกเกอร์ฟังก์ชันบนการเปลี่ยนแปลง Cloud Storage

ใช้ functions.storage เพื่อสร้างฟังก์ชันที่จัดการเหตุการณ์ Cloud Storage ขึ้นอยู่กับว่าคุณต้องการกำหนดขอบเขตฟังก์ชันของคุณไปยังที่เก็บข้อมูล Cloud Storage เฉพาะหรือใช้ที่เก็บข้อมูลเริ่มต้นให้ใช้อย่างใดอย่างหนึ่งต่อไปนี้:

  • functions.storage.object() เพื่อรับฟังการเปลี่ยนแปลงวัตถุบนที่เก็บข้อมูลเริ่มต้น
  • functions.storage.bucket('bucketName').object() เพื่อฟังการเปลี่ยนแปลงวัตถุในที่เก็บข้อมูลเฉพาะ

ตัวอย่างเช่นตัวสร้างภาพขนาดย่อจะถูกกำหนดขอบเขตไว้ที่ที่เก็บข้อมูลเริ่มต้นสำหรับโครงการ:

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

Cloud Storage รองรับเหตุการณ์เหล่านี้:

  • onArchive ส่งเฉพาะเมื่อที่เก็บข้อมูลเปิดใช้งานการ กำหนดเวอร์ชันออบเจ็กต์ เหตุการณ์นี้บ่งชี้ว่าเวอร์ชันที่ใช้งานจริงของอ็อบเจ็กต์กลายเป็นเวอร์ชันที่เก็บถาวรไม่ว่าจะเป็นเพราะถูกเก็บถาวรหรือเนื่องจากถูกเขียนทับโดยการอัปโหลดอ็อบเจ็กต์ที่มีชื่อเดียวกัน
  • onDelete Sent เมื่อวัตถุถูกลบอย่างถาวร ซึ่งรวมถึงออบเจ็กต์ที่ถูกเขียนทับหรือถูกลบออกโดยเป็นส่วนหนึ่งของการ กำหนดค่าวงจรชีวิต สำหรับ onArchive เปิดใช้งานการ กำหนดเวอร์ชันอ็อบเจ็กต์ สิ่งนี้จะไม่ถูกส่งเมื่ออ็อบเจ็กต์ถูกเก็บถาวร (ดู onArchive ) แม้ว่าการเก็บถาวรจะเกิดขึ้นผ่านเมธอด storage.objects.delete
  • onFinalize ส่งเมื่อสร้างวัตถุใหม่ (หรือรุ่นใหม่ของวัตถุที่มีอยู่) ในที่เก็บข้อมูลสำเร็จ ซึ่งรวมถึงการคัดลอกหรือเขียนใหม่วัตถุที่มีอยู่ การอัปโหลดที่ล้มเหลวจะไม่ทำให้เกิดเหตุการณ์นี้
  • onMetadataUpdate ส่งเมื่อข้อมูลเมตาของวัตถุที่มีอยู่เปลี่ยนแปลง

ตั้งเหตุการณ์ภายใน on จัดการเหตุการณ์ที่แสดงข้างต้นสำหรับ onFinalize

เข้าถึงแอ็ตทริบิวต์อ็อบเจ็กต์ Storage

Cloud Functions แสดงแอ็ตทริบิวต์ Storage object จำนวนหนึ่งเช่น size และ contentType สำหรับไฟล์ที่อัพเดต แอตทริบิวต์ "metageneration" จะเพิ่มขึ้นทุกครั้งที่มีการเปลี่ยนแปลงข้อมูลเมตาของวัตถุ สำหรับออบเจ็กต์ใหม่ค่า metageneration คือ 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.

ตัวอย่างการสร้างภาพขนาดย่อใช้แอตทริบิวต์เหล่านี้บางส่วนเพื่อตรวจหาทางออกกรณีที่ฟังก์ชันส่งคืน:

// Exit if this is triggered on a file that is not an image.
if (!contentType.startsWith('image/')) {
  return console.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 console.log('Already a Thumbnail.');
}

ดาวน์โหลดแปลงร่างและอัปโหลดไฟล์

ในบางกรณีอาจไม่จำเป็นต้องดาวน์โหลดไฟล์จาก Cloud Storage อย่างไรก็ตามในการทำงานที่เข้มข้นเช่นการสร้างภาพขนาดย่อจากไฟล์ที่จัดเก็บใน Cloud Storage คุณต้องดาวน์โหลดไฟล์ไปยังอินสแตนซ์ของฟังก์ชันนั่นคือเครื่องเสมือนที่รันโค้ดของคุณ

หากต้องการดาวน์โหลดและอัปโหลดออบเจ็กต์ใหม่ไปยัง Cloud Storage ได้อย่างง่ายดายให้ติดตั้ง แพ็คเกจ Google Cloud Storage โดยใช้ npm install --save @google-cloud/storage และนำเข้า ในการใช้ JavaScript สัญญาเพื่อจัดการกระบวนการภายนอกเช่นงานการประมวลผลภาพขนาดย่อในตัวอย่างให้นำเข้า 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');

ใช้ gcs.bucket.file(filePath).download เพื่อดาวน์โหลดไฟล์ไปยังไดเร็กทอรีชั่วคราวบนอินสแตนซ์ Cloud Functions ของคุณ ในตำแหน่งนี้คุณสามารถประมวลผลไฟล์ได้ตามต้องการจากนั้นอัปโหลดไปยัง Cloud Storage เมื่อทำงานแบบอะซิงโครนัสตรวจสอบให้แน่ใจว่าคุณส่งคืนสัญญา JavaScript ในการเรียกกลับของคุณ

ตัวอย่าง: การเปลี่ยนแปลงรูปภาพ

Cloud Functions มีโปรแกรมประมวลผลภาพที่เรียกว่า ImageMagick ซึ่งสามารถดำเนินการปรับแต่งไฟล์ภาพกราฟิก ต่อไปนี้เป็นตัวอย่างวิธีสร้างภาพขนาดย่อสำหรับไฟล์รูปภาพที่อัปโหลด:

// 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);
// Generate a thumbnail using ImageMagick.
await spawn('convert', [tempFilePath, '-thumbnail', '200x200>', tempFilePath]);
console.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);

รหัสนี้เรียกใช้โปรแกรมบรรทัดคำสั่ง ImageMagick convert เพื่อสร้างภาพขนาดย่อ 200x200 สำหรับภาพที่บันทึกในไดเร็กทอรีชั่วคราวจากนั้นอัปโหลดกลับไปที่ Cloud Storage

สำรวจตัวอย่างเพิ่มเติม

ตัวอย่างเพิ่มเติมของฟังก์ชันการแปลงสื่อทั่วไปรวมถึงการ แปลงไฟล์รูปภาพการ กลั่นกรองเนื้อหาการ แยกข้อมูลเมตา EXIF รายการตัวอย่างทั้งหมด มีอยู่ใน GitHub

ดู เอกสาร ทริกเกอร์ Google Cloud Storage ฉบับเต็ม สำหรับข้อมูลเพิ่มเติม