Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Trình kích hoạt lưu trữ đám mây

Bạn có thể kích hoạt một chức năng để phản hồi việc tải lên, cập nhật hoặc xóa các tệp và thư mục trong Cloud Storage.

Các ví dụ trong trang này dựa trên một chức năng mẫu kích hoạt khi các tệp hình ảnh được tải lên Cloud Storage. Hàm mẫu này trình bày cách truy cập thuộc tính sự kiện, cách tải tệp xuống phiên bản Chức năng đám mây và các nguyên tắc cơ bản khác về xử lý các sự kiện Lưu trữ đám mây.

Để biết thêm ví dụ về các trường hợp sử dụng, xem tôi có thể làm gì với Cloud Chức năng?

Kích hoạt chức năng thay đổi trên Cloud Storage

Sử dụng functions.storage để tạo ra một hàm xử lý sự kiện Cloud Storage. Tùy thuộc vào việc bạn muốn phân bổ chức năng của mình vào một nhóm Cloud Storage cụ thể hay sử dụng nhóm mặc định, hãy sử dụng một trong các cách sau:

Ví dụ: mẫu trình tạo hình thu nhỏ được đưa vào nhóm mặc định cho dự án:

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

Cloud Storage hỗ trợ các sự kiện sau:

  • onArchive Chỉ gửi khi một xô đã cho phép đối tượng versioning . Sự kiện này cho biết rằng phiên bản trực tiếp của một đối tượng đã trở thành phiên bản được lưu trữ, vì nó đã được lưu trữ hoặc vì nó đã bị ghi đè bởi việc tải lên đối tượng cùng tên.
  • onDelete Sent khi một đối tượng đã bị xóa vĩnh viễn. Điều này bao gồm các đối tượng được ghi đè hoặc bị xóa như một phần của nhân xô cấu hình vòng đời . Đối xô với đối tượng versioning kích hoạt, điều này không được gửi khi một đối tượng được lưu trữ (xem onArchive ), ngay cả khi lưu trữ xảy ra thông qua storage.objects.delete phương pháp.
  • onFinalize Sent khi một đối tượng mới (hoặc một thế hệ mới của một đối tượng hiện có) được tạo thành công trong xô. Điều này bao gồm việc sao chép hoặc viết lại một đối tượng hiện có. Tải lên không thành công không kích hoạt sự kiện này.
  • onMetadataUpdate gửi khi các siêu dữ liệu của một thay đổi đối tượng hiện có.

Đặt sự kiện trong on xử lý sự kiện như trình bày ở trên cho onFinalize .

Truy cập thuộc tính đối tượng Cloud Storage

Đám mây Chức năng cho thấy một số đối tượng Cloud Storage thuộc tính như sizecontentType cho các tập tin cập nhật. Các 'metageneration' thuộc tính được tăng lên bất cứ khi nào có một sự thay đổi siêu dữ liệu của đối tượng. Đối với các đối tượng mới, các metageneration giá trị là 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.

Mẫu tạo hình thu nhỏ sử dụng một số thuộc tính này để phát hiện các trường hợp thoát trong đó hàm trả về:

// 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.');
}

Tải xuống, chuyển đổi và tải lên một tệp

Đối với một số trường hợp, có thể không cần tải tệp xuống từ Cloud Storage. Tuy nhiên, để thực hiện các tác vụ chuyên sâu như tạo hình ảnh thu nhỏ từ tệp được lưu trữ trong Cloud Storage, bạn cần tải tệp xuống phiên bản chức năng — tức là máy ảo chạy mã của bạn.

Để dễ dàng tải về và tái tải lên đối tượng để Cloud Storage, cài đặt các gói Google Cloud Storage sử dụng npm install --save @google-cloud/storage , và import nó. Để sử dụng những lời hứa hoạt Javascript để xử lý các quá trình bên ngoài như các nhiệm vụ xử lý hình ảnh thu nhỏ trong mẫu, cũng nhập 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');

Sử dụng gcs.bucket.file(filePath).download để tải về một tập tin vào một thư mục tạm thời trên Chức năng Ví dụ Cloud của bạn. Tại vị trí này, bạn có thể xử lý tệp nếu cần và sau đó tải lên Cloud Storage. Khi thực hiện các tác vụ không đồng bộ, hãy đảm bảo rằng bạn trả về một lời hứa JavaScript trong lệnh gọi lại của mình.

Ví dụ: chuyển đổi hình ảnh

Đám mây Chức năng cung cấp một chương trình xử lý hình ảnh gọi ImageMagick có thể thực hiện thao tác trên các tập tin hình ảnh đồ họa. Sau đây là ví dụ về cách tạo hình ảnh thu nhỏ cho tệp hình ảnh đã tải lên:

// 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);

Mã này thực thi ImageMagick lệnh chương trình dòng convert để tạo ra một hình ảnh thu nhỏ kích thước 200x200 cho hình ảnh được lưu trong thư mục tạm thời, sau đó tải lên nó trở lại Cloud Storage.

Khám phá thêm các ví dụ

Nhiều ví dụ về các chức năng chuyển đổi phương tiện truyền thông phổ biến bao gồm chuyển mã hình ảnh , kiểm duyệt nội dung , trích xuất siêu dữ liệu EXIF . Các danh sách đầy đủ các ví dụ có sẵn trên GitHub.

Xem cò Google Cloud Storage đầy đủ tài liệu hướng dẫn để biết thêm thông tin.