Firebase sử dụng Google Cloud tài khoản dịch vụ để vận hành và quản lý dịch vụ
mà không cần chia sẻ thông tin đăng nhập của người dùng. Khi bạn tạo một dự án Firebase sử dụng
Cloud Storage, bạn có thể nhận thấy rằng một tài khoản dịch vụ tương ứng đang
đã có sẵn trong dự án của bạn:
service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com
Xem
hướng dẫn hỗ trợ Firebase này để biết thêm
của bạn.
Trong trường hợp này, Firebase SDK dành cho Cloud Storage sẽ dùng bộ chứa mặc định trong Bậc miễn phí App Engine. Chiến dịch này cho phép bạn nhanh chóng thiết lập và chạy bằng Cloud Storage mà không phải nhập thông tin thẻ tín dụng hoặc kích hoạt tài khoản Cloud Billing. Điều này cũng cho phép bạn dễ dàng chia sẻ dữ liệu giữa Firebase và một dự án Google Cloud.
Tích hợp với Google Cloud, bao gồm cả việc nhập Cloud Storage hiện có bộ chứa, yêu cầu phải có dự án Firebase theo Gói linh hoạt. Tìm hiểu thêm về chính sách trên trang giá của chúng tôi.
Google Cloud Storage
Bạn có thể sử dụng API Google Cloud Storage để truy cập vào các tệp được tải lên qua Firebase SDK dành cho Cloud Storage, đặc biệt là để thực hiện các thao tác phức tạp hơn, chẳng hạn như sao chép hoặc di chuyển một tệp hoặc trang thông tin tất cả tệp có tại tham chiếu.
Điều quan trọng cần lưu ý là các yêu cầu này sử dụng Google Cloud Storage tuỳ chọn kiểm soát quyền truy cập, thay vì Firebase Authentication và Cloud Storage Security Rules.
API
Ngoài Firebase SDK dành cho Cloud Storage, có một số cách khác
để truy cập dữ liệu được lưu trữ trong bộ chứa Cloud Storage, tuỳ thuộc vào dữ liệu của bạn
muốn làm. Nếu bạn đang truy cập dữ liệu trên một máy chủ, chúng tôi cung cấp phía máy chủ
các thư viện, cũng như API RESTful XML
tương thích với JSON
và S3 hoặc nếu bạn
cần viết tập lệnh các thay đổi hoặc thực hiện các công việc quản trị khác, chúng tôi đã có một
công cụ dòng lệnh sẽ hữu ích.
Google Cloud SDK máy chủ
Google Cloud cung cấp SDK máy chủ chất lượng cao cho một số Cloud, bao gồm Cloud Storage. Các thư viện này có trong Node.js, Java, hãy truy cập, Python, PHP, và Hồng ngọc.
Để biết thêm thông tin, bao gồm cả hướng dẫn cài đặt, xác thực và để khắc phục sự cố, hãy tham khảo tài liệu dành riêng cho từng nền tảng được liên kết ở trên.
Dưới đây là ví dụ về cách sử dụng SDK Google Cloud Storage:
Node.js
// Require gcloud var gcloud = require('google-cloud'); // Enable Cloud Storage var gcs = gcloud.storage({ projectId: 'grape-spaceship-123', keyFilename: '/path/to/keyfile.json' }); // Reference an existing bucket. var bucket = gcs.bucket('my-existing-bucket'); // Upload a local file to a new file to be created in your bucket. bucket.upload('/photos/zoo/zebra.jpg', function(err, file) { if (!err) { // "zebra.jpg" is now in your bucket. } }); // Download a file from your bucket. bucket.file('giraffe.jpg').download({ destination: '/photos/zoo/giraffe.jpg' }, function(err) {});
Java
// Enable Cloud Storage Storage storage = StorageOptions.builder() .authCredentials(AuthCredentials.createForJson(new FileInputStream("/path/to/my/key.json")) .build() .service(); // Upload a local file to a new file to be created in your bucket. InputStream uploadContent = ... BlobId blobId = BlobId.of("my-existing-bucket", "zebra.jpg"); BlobInfo blobInfo = BlobInfo.builder(blobId).contentType("text/plain").build(); Blob zebraBlob = storage.create(blobInfo, content); // Download a file from your bucket. Blob giraffeBlob = storage.get("my-existing-bucket", "giraffe.jpg", null); InputStream downloadContent = giraffeBlob.getInputStream();
Tiến hành
// Enable Cloud Storage client, err := storage.NewClient(ctx, option.WithServiceAccountFile("path/to/keyfile.json")) if err != nil { log.Fatal(err) } // Download a file from your bucket. rc, err := client.Bucket("my-existing-bucket").Object("giraffe.jpg").NewReader(ctx) if err != nil { log.Fatal(err) } defer rc.Close() body, err := ioutil.ReadAll(rc) if err != nil { log.Fatal(err) }
Python
# Import gcloud from google.cloud import storage # Enable Cloud Storage client = storage.Client() # Reference an existing bucket. bucket = client.get_bucket('my-existing-bucket') # Upload a local file to a new file to be created in your bucket. zebraBlob = bucket.get_blob('zebra.jpg') zebraBlob.upload_from_filename(filename='/photos/zoo/zebra.jpg') # Download a file from your bucket. giraffeBlob = bucket.get_blob('giraffe.jpg') giraffeBlob.download_as_string()
PHP
// Require gcloud require 'vendor/autoload.php'; use Google\Cloud\Storage\StorageClient; // Enable Cloud Storage $storage = new StorageClient([ 'projectId' => 'grape-spaceship-123' ]); // Reference an existing bucket. $bucket = $storage->bucket('my-existing-bucket'); // Upload a file to the bucket. $bucket->upload( fopen('/photos/zoo/zebra.jpg', 'r') ); // Download a file from your bucket. $object = $bucket->object('giraffe.jpg'); $object->downloadToFile('/photos/zoo/giraffe.jpg');
Ruby
# Require gcloud require "google/cloud" # Enable Cloud Storage gcloud = Google::Cloud.new "grape-spaceship-123", "/path/to/keyfile.json" storage = gcloud.storage # Reference an existing bucket. bucket = storage.bucket "my-existing-bucket" # Upload a file to the bucket. bucket.create_file "/photos/zoo/zebra.jpg", "zebra.jpg" # Download a file from your bucket. file = bucket.file "giraffe.jpg" file.download "/photos/zoo/#{file.name}"
API REST
Nếu bạn đang sử dụng ngôn ngữ không có thư viện ứng dụng, hãy thực hiện tác vụ các thư viện ứng dụng không làm, hoặc chỉ có một ứng dụng HTTP mà bạn yêu thích thích sử dụng hơn, Google Cloud Storage cung cấp API cho cả hai JSON và XML.
Ngoài các API truy cập dữ liệu bộ nhớ này, để quản lý các bộ chứa trong Cloud Storage để dùng trong các dự án Firebase, bạn có thể sử dụng API Cloud Storage cho Firebase.
gsutil
gsutil
là một lệnh
công cụ dòng cung cấp cho bạn quyền truy cập trực tiếp vào Cloud Storage. Bạn có thể dùng gsutil
để thực hiện nhiều công việc quản lý đối tượng và nhóm, bao gồm:
- Tải lên, tải xuống và xoá đối tượng.
- Liệt kê các nhóm và đối tượng.
- Di chuyển, sao chép và đổi tên đối tượng.
- Chỉnh sửa ACL của đối tượng và nhóm.
gsutil
cho phép thực hiện các thao tác nâng cao khác, chẳng hạn như di chuyển tệp từ một
thư mục khác hoặc xoá tất cả các tệp dưới một vị trí nhất định.
Di chuyển tất cả các tệp từ tham chiếu này sang tham chiếu khác dễ dàng như:
gsutil mv gs://bucket/old/reference gs://bucket/new/reference
Thao tác xoá hàng loạt tất cả các tệp bên dưới một tệp tham chiếu cũng trực quan tương tự:
# Delete all files under a path gsutil rm -r gs://bucket/reference/to/delete# Delete all the files in a bucket but not the bucket gsutil rm -r gs://bucket/**
# Delete all the files AND the bucket # Removing the default bucket will break the Firebase SDKs for Cloud Storage and is strongly discouraged gsutil rm -r gs://bucket
Yêu cầu giá
Google Cloud Storage là một dịch vụ có khả năng mở rộng cao, sử dụng phương thức tự động cấp tài nguyên bổ sung để đạt được tỷ lệ yêu cầu rất cao.
Google Cloud Storage là dịch vụ nhiều người thuê, có nghĩa là người dùng chia sẻ cùng một nhóm tài nguyên cơ bản. Để tận dụng tối đa những tài nguyên dùng chung, bộ chứa có dung lượng IO ban đầu.
Khi bạn định tích hợp Cloud Storage for Firebase vào ứng dụng, hãy cân nhắc tỷ lệ yêu cầu tối thiểu mà ứng dụng của bạn cần để có hiệu suất tốt và về việc giúp các yêu cầu một cách hiệu quả. Hãy xem xét các nguyên tắc về tỷ lệ yêu cầu, và đặc biệt là tăng tỷ lệ yêu cầu.
Tạo phiên bản đối tượng
Bạn đã bao giờ vô tình xoá nội dung nào đó và không có bản sao lưu chưa?
Google Cloud Storage hỗ trợ
Tạo phiên bản đối tượng,
cung cấp một phương thức tự động để sao lưu dữ liệu của bạn và khôi phục từ
các bản sao lưu. Bạn có thể bật tính năng Tạo phiên bản đối tượng bằng cách sử dụng gsutil
versioning set
:
gsutil versioning set on gs://<your-cloud-storage-bucket>
Cloud Storage luôn chọn phiên bản mới nhất, vì vậy nếu bạn muốn khôi phục một đối tượng, bạn cần phải sử dụng một trong các API hoặc công cụ khác ở trên để đặt đối tượng mong muốn là đối tượng gần đây nhất.
Quản lý vòng đời đối tượng
Khả năng tự động lưu trữ hoặc xoá các tệp cũ sẽ hữu ích cho nhiều ứng dụng. Thật may, Google Cloud Storage cung cấp Quản lý vòng đời đối tượng, cho phép bạn xoá hoặc lưu trữ các đối tượng sau một khoảng thời gian nhất định.
Hãy xem xét ứng dụng chia sẻ ảnh mà bạn muốn xoá tất cả ảnh trong vòng 1 ngày. Bạn có thể thiết lập chính sách vòng đời của đối tượng như sau:
// lifecycle.json { "lifecycle": { "rule": [ { "action": {"type": "Delete"}, "condition": {"age": 1} } ] } }
Và triển khai bằng lệnh gsutil
lifecycle set
:
gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>
Lưu ý rằng điều này áp dụng cho tất cả các tệp trong bộ chứa, vì vậy nếu
bạn đang lưu trữ các bản sao lưu quan trọng của người dùng mà bạn muốn lưu trữ trong thời gian dài
ảnh phụ mà bạn muốn xóa hàng ngày, bạn có thể muốn sử dụng hai
hoặc thực hiện xoá theo cách thủ công bằng gsutil
hoặc máy chủ của riêng bạn.
App Engine
App Engine là một "Nền tảng dưới dạng dịch vụ" tự động mở rộng quy mô phụ trợ để phản hồi lượng lưu lượng truy cập mà tính năng đó nhận được. Chỉ cần tải phần phụ trợ của bạn lên mã và Google sẽ quản lý phạm vi cung cấp ứng dụng của bạn; không có máy chủ cho bạn cung cấp hoặc duy trì. App Engine là cách nhanh chóng và dễ dàng để thêm khả năng xử lý bổ sung hoặc khả năng thực thi đáng tin cậy cho ứng dụng Firebase của bạn.
SDK Firebase dành cho Cloud Storage sử dụng bộ chứa mặc định của App Engine, tức là nếu tạo ứng dụng App Engine, bạn có thể dùng App Engine tích hợp sẵn Các API để chia sẻ dữ liệu giữa Firebase và App Engine. Thông tin này hữu ích cho thực hiện mã hoá âm thanh, chuyển mã video và biến đổi hình ảnh cũng như như các quy trình xử lý nền chuyên sâu khác tính toán.
Java, Python và các ngôn ngữ khác Môi trường tiêu chuẩn đối với App Engine, hãy bao gồm App Engine Images API (Java, Python, có thể đổi kích thước, xoay, lật và cắt hình ảnh, cũng như trả về URL phân phát hình ảnh cho phép biến đổi phía máy khách, tương tự như Cloudinary và Imgix.
Khi nhập dự án Google Cloud hiện có vào Firebase, nếu bạn muốn
làm cho mọi đối tượng App Engine hiện có khả dụng trong Firebase, bạn sẽ cần phải đặt
kiểm soát quyền truy cập mặc định vào các đối tượng của bạn để cho phép Firebase truy cập vào các đối tượng đó bằng cách
chạy lệnh sau bằng cách sử dụng
gsutil
:
gsutil -m acl ch -r -u service-<project number;gt@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://<your-cloud-storage-bucket>
Vấn đề đã biết
Có hai trường hợp đã biết mà bạn không thể nhập ứng dụng App Engine:
- Dự án có một trước đây là một App Engine Datastore/Slave .
- Dự án có một mã dự án có tiền tố miền, ví dụ:
domain.com:project-1234
.
Trong cả hai trường hợp này, dự án sẽ không hỗ trợ Cloud Storage for Firebase, và bạn nên tạo một dự án Firebase mới để sử dụng Cloud Storage Hãy liên hệ với bộ phận hỗ trợ để chúng tôi có thể giúp bạn.
Chức năng đám mây của Google (Beta)
Google Cloud Functions là một nhẹ, dựa trên sự kiện, điện toán không đồng bộ cho phép bạn tạo các hàm nhỏ chỉ dùng để phản hồi sự kiện mà không cần đến để quản lý máy chủ hoặc môi trường thời gian chạy. Các hàm này có thể dùng để chuyển mã video, phân loại hình ảnh bằng công nghệ học máy hoặc đồng bộ hoá siêu dữ liệu bằng Firebase Realtime Database. Với mức hao tổn thấp hơn App Engine, Cloud Functions là cách nhanh nhất để phản ứng với những thay đổi trong Cloud Storage
Google Cloud Vision API
API Google Cloud Vision giúp hiểu được nội dung của hình ảnh bằng cách gói gọn các mô hình học máy trong một API dễ sử dụng. Công cụ này nhanh chóng phân loại hình ảnh thành hàng nghìn danh mục, phát hiện các đối tượng và khuôn mặt riêng lẻ trong hình ảnh, tìm và đọc các từ được in có trong hình ảnh, xác định nội dung phản cảm và thậm chí còn cung cấp cả tính năng phân tích ý kiến của hình ảnh.
Google Cloud Speech API
Tương tự như Vision API, API Google Cloud Speech cho phép trích xuất văn bản từ tệp âm thanh được lưu trữ trong Cloud Storage. API này nhận dạng hơn 80 ngôn ngữ và biến thể để hỗ trợ người dùng trên toàn cầu cơ sở. Khi kết hợp với API Ngôn ngữ tự nhiên của Google Cloud, nhà phát triển có thể trích xuất văn bản thô và suy luận ý nghĩa của văn bản đó. Nếu cần phải có đối tượng người xem trên toàn cầu, hãy kết hợp API Google Dịch để dịch văn bản sang hơn 90 ngôn ngữ.