Bạn có thể kích hoạt một hàm để phản hồi việc tải lên, cập nhật hoặc xóa tệp và thư mục trong Cloud Storage.
Các ví dụ trong trang này dựa trên một hàm mẫu kích hoạt khi hình ảnh tệp đã được tải lên Cloud Storage. Hàm mẫu này minh hoạ cách truy cập vào các thuộc tính của sự kiện, cách tải tệp xuống Cloud Functions và các nguyên tắc cơ bản khác để xử lý sự kiện Cloud Storage.
Để biết thêm ví dụ về các trường hợp sử dụng, hãy xem Tôi có thể làm gì với Cloud Functions?
Kích hoạt một hàm trên các thay đổi về Cloud Storage
Sử dụng functions.storage
để tạo một hàm xử lý
Cloud Storage sự kiện. Tùy thuộc vào việc bạn muốn đặt phạm vi
vào một bộ chứa Cloud Storage cụ thể hoặc dùng giá trị mặc định
bộ chứa, hãy sử dụng một trong các cách sau:
functions.storage.object()
để theo dõi những thay đổi về đối tượng trên bộ chứa Cloud Storage mặc định.functions.storage.bucket('bucketName').object()
để theo dõi những thay đổi của đối tượng trên một bộ chứa cụ thể.
Ví dụ: mẫu trình tạo hình thu nhỏ được đặt trong phạm vi bộ chứa mặc định cho dự án:
exports.firstGenGenerateThumbnail = functions.storage.object().onFinalize(async (object) => { // ... });
Cloud Storage hỗ trợ những sự kiện sau:
onArchive
Chỉ được gửi khi bộ chứa đã bật tính năng tạo phiên bản đối tượng. 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 lưu trữ, vì đối tượng đó đã được lưu trữ hoặc vì đối tượng đó đã bị ghi đè bằng việc tải một đối tượng có cùng tên lên.onDelete
Được gửi khi một đối tượng đã bị xoá vĩnh viễn. Số liệu này bao gồm cả những đối tượng bị ghi đè hoặc bị xoá trong cấu hình vòng đời của bộ chứa. Đối với những nhóm đã bật tính năng tạo phiên bản đối tượng, thông báo này sẽ không được gửi khi đối tượng được lưu trữ (xemonArchive
), ngay cả khi quá trình lưu trữ diễn ra thông qua phương thứcstorage.objects.delete
.onFinalize
Được gửi khi tạo thành công một đối tượng mới (hoặc thế hệ mới của đối tượng hiện có) trong bộ chứa. Điều này bao gồm việc sao chép hoặc viết lại đối tượng hiện có. Việc tải lên không thành công sẽ không kích hoạt sự kiện này.onMetadataUpdate
Được gửi khi siêu dữ liệu của một đối tượng hiện có thay đổi.
Đặt sự kiện trong trình xử lý sự kiện on
như minh hoạ ở trên cho onFinalize
.
Truy cập vào các thuộc tính đối tượng Cloud Storage
Cloud Functions hiển thị một số thuộc tính đối tượng Cloud Storage, chẳng hạn như
dưới dạng
size
và
contentType
cho tệp được cập nhật. Chiến lược phát hành đĩa đơn
"metaGen"
sẽ tăng lên bất cứ khi nào có thay đổi đối với
siêu dữ liệu của đối tượng. Đối với đối tượng mới, giá trị metageneration
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.
Mẫu tạo hình thu nhỏ sử dụng một số thuộc tính trong số này để phát hiện lần thoát các trường hợp 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, biến đổi và tải tệp lên
Đối với một số trường hợp, có thể bạn không cần tải tệp xuống từ Cloud Storage. Tuy nhiên, để thực hiện các công việc chuyên sâu như tạo hình thu nhỏ từ một tệp được lưu trữ trong Cloud Storage, bạn cần tải xuống tệp vào thực thể hàm – tức là máy ảo chạy mã của bạn.
Để dễ dàng tải xuống và tải lại các đối tượng lên Cloud Storage, hãy cài đặt
Google Cloud Storage
bằng cách sử dụng
npm install --save @google-cloud/storage
rồi nhập tệp đó. Để sử dụng JavaScript
hứa hẹn sẽ xử lý các quy trình bên ngoài như tác vụ xử lý hình thu nhỏ trong
mẫu, đồng thời nhập child-process-promise
:
const functions = require('firebase-functions/v1'); const admin = require('firebase-admin'); admin.initializeApp() const path = require('path'); //library for resizing images const sharp = require('sharp');
Sử dụng gcs.bucket.file(filePath).download
để tải tệp xuống
trên thực thể Cloud Functions. Ở vị trí này, bạn có thể
hãy xử lý tệp nếu cần rồi tải lên Cloud Storage. Thời gian
thực hiện các tác vụ không đồng bộ, hãy đảm bảo bạn trả lại lời hứa JavaScript trong
.
Ví dụ: biến đổi hình ảnh
Sử dụng Cloud Functions cùng với các chương trình xử lý hình ảnh như
sharp
, bạn có thể thực hiện
các thao tác đối với tệp hình ảnh đồ hoạ. Sau đây là ví dụ về cách
cách tạo hình thu nhỏ cho tệp hình ảnh đã tải lên:
// Download file from bucket. const bucket = admin.storage().bucket(fileBucket); const metadata = { contentType: contentType, }; const downloadResponse = await bucket.file(filePath).download(); const imageBuffer = downloadResponse[0]; functions.logger.log("Image downloaded!"); // Generate a thumbnail using sharp. const thumbnailBuffer = await sharp(imageBuffer).resize({ width: 200, height: 200, withoutEnlargement: true, }).toBuffer(); functions.logger.log("Thumbnail created"); // Upload the thumbnail with a 'thumb_' prefix. const thumbFileName = `thumb_${fileName}`; const thumbFilePath = path.join(path.dirname(filePath), thumbFileName); await bucket.file(thumbFilePath).save(thumbnailBuffer, { metadata: metadata, }); return functions.logger.log("Thumbnail uploaded!");
Mã này sẽ tạo một Hình thu nhỏ có kích thước 200x200 cho hình ảnh được lưu trong thư mục tạm thời, sau đó tải hình ảnh đó lên quay lại Cloud Storage.
Khám phá các ví dụ khác
Ví dụ khác về các hàm biến đổi nội dung đa phương tiện phổ biến: chuyển mã hình ảnh, kiểm duyệt nội dung, trích xuất siêu dữ liệu EXIF. Danh sách đầy đủ các ví dụ là hiện có trên GitHub.