Dự án Firebase thực sự chỉ là một dự án Google Cloud đã bật các cấu hình và dịch vụ dành riêng cho Firebase. Điều này có nghĩa là bạn có thể truy cập vào mọi bộ chứa Cloud Storage mà bạn sử dụng với Cloud Storage for Firebase trong Google Cloud (bao gồm cả bảng điều khiển và API của bộ chứa đó).
Để tích hợp với Google Cloud, bao gồm cả việc nhập các bộ chứa Cloud Storage hiện có, bạn cần có một dự án Firebase sử dụng gói giá linh hoạt Blaze (trả phí theo mức sử dụng).
Những điều cần cân nhắc đối với tài khoản dịch vụ
Firebase sử dụng tài khoản dịch vụ Google Cloud để vận hành và quản lý các dịch vụ mà không cần chia sẻ thông tin xác thực của người dùng. Khi 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 đã có trong dự án:
.
Để biết thêm thông tin, hãy xem bài viết Tổng quan về tài khoản dịch vụ Firebase.
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 thông qua SDK Firebase 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 tệp hoặc liệt kê tất cả tệp có sẵn tại một tệp 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 các tuỳ chọn kiểm soát quyền truy cập thay vì Firebase Authentication và Cloud Storage Security Rules.
API
Ngoài SDK Firebase cho Cloud Storage, còn 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 việc bạn muốn làm gì. Nếu bạn đang truy cập dữ liệu trên máy chủ, chúng tôi cung cấp các thư viện phía máy chủ, cũng như API RESTful XML
tương thích với JSON
và S3. Hoặc nếu bạn cần tập lệnh thay đổi hoặc thực hiện các tác vụ quản trị khác, chúng tôi có một công cụ dòng lệnh sẽ hữu ích.
SDK máy chủ Google Cloud
Google Cloud cung cấp các SDK máy chủ chất lượng cao cho một số sản phẩm trên đám mây, bao gồm cả Cloud Storage. Các thư viện này có sẵn trong Node.js, Java, go, Python, PHP và Ruby.
Để 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 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 một ngôn ngữ không có thư viện ứng dụng, muốn làm một việc mà thư viện ứng dụng không làm hoặc chỉ có một ứng dụng HTTP yêu thích mà bạn muốn sử dụng, thì Google Cloud Storage cung cấp API cho cả 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 trên Cloud Storage để sử 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 công cụ dòng lệnh cho phép bạn truy cập trực tiếp vào Cloud Storage. Bạn có thể sử dụng gsutil
để thực hiện nhiều thao tác quản lý đối tượng và bộ chứa, bao gồm:
- Tải lên, tải xuống và xoá đối tượng.
- Liệt kê các bộ chứa 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à bộ chứa.
gsutil
cho phép các thao tác nâng cao khác, chẳng hạn như di chuyển tệp từ thư mục này sang thư mục khác hoặc xoá tất cả tệp bên dưới một vị trí nhất định.
Bạn có thể di chuyển tất cả tệp từ một tệp tham chiếu sang một tệp tham chiếu khác một cách dễ dàng như sau:
gsutil mv gs://bucket/old/reference gs://bucket/new/reference
Bạn cũng có thể xoá hàng loạt tất cả các tệp bên dưới một tệp đối chiếu theo cách 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
Tỷ lệ yêu cầu
Google Cloud Storage là một dịch vụ có khả năng mở rộng cao, sử dụng công nghệ tự động mở rộng để đạt được tốc độ yêu cầu rất cao.
Google Cloud Storage là một dịch vụ đa người dùng, nghĩa là người dùng chia sẻ cùng một nhóm tài nguyên cơ bản. Để khai thác tối đa các tài nguyên dùng chung này, các bộ chứa có dung lượng IO ban đầu.
Khi bạn dự định tích hợp Cloud Storage for Firebase vào ứng dụng, hãy cân nhắc tốc độ 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à cách đưa ra yêu cầu một cách hiệu quả. Xem lại các nguyên tắc về tốc độ yêu cầu, đặc biệt là tăng tốc độ yêu cầu.
Tạo phiên bản đối tượng
Bạn đã từng 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ính năng Tạo phiên bản đối tượng. Tính năng này cung cấp một cách tự động để sao lưu và khôi phục dữ liệu từ các bản sao lưu đó. Bạn có thể bật tính năng Phiên bản đối tượng bằng lệnh 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 muốn khôi phục một đối tượng, bạn cần 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àm đối tượng mới 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ũ là một tính năng hữu ích cho nhiều ứng dụng. May mắn thay, Google Cloud Storage cung cấp tính năng Quản lý vòng đời của đố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 cân nhắc một ứng dụng chia sẻ ảnh mà bạn muốn tất cả ảnh bị xoá trong vòng một ngày. Bạn có thể thiết lập chính sách vòng đời đố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>
Xin lưu ý rằng điều này áp dụng cho tất cả tệp trong bộ chứa. Vì vậy, nếu đ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 cùng với ảnh mà bạn muốn xoá hằng ngày, bạn nên sử dụng hai bộ chứa riêng biệt hoặc xoá theo cách thủ công bằng gsutil
hoặc máy chủ của riêng bạn.
Google Cloud Functions (Beta)
Google Cloud Functions là một giải pháp điện toán không đồng bộ, nhẹ, dựa trên sự kiện, cho phép bạn tạo các hàm nhỏ, có một mục đích duy nhất để phản hồi các sự kiện mà không cần quản lý máy chủ hoặc môi trường thời gian chạy. Bạn có thể sử dụng các hàm này để 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 với Firebase Realtime Database. Với mức hao tổn thậm chí còn thấp hơn App Engine, Cloud Functions là cách nhanh nhất để phản ứng với các thay đổi trong Cloud Storage.
Google Cloud Vision API
Google Cloud Vision API cho phép nhà phát triển hiểu được nội dung của hình ảnh bằng cách đóng gói các mô hình học máy mạnh mẽ 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 từng đối tượng và khuôn mặt trong hình ảnh, tìm và đọc các từ in trong hình ảnh, xác định nội dung phản cảm và thậm chí cung cấp cả tính năng phân tích cảm xúc trong hình ảnh.
Google Cloud Speech API
Tương tự như API Vision, Google Cloud Speech API cho phép nhà phát triển 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ợ cơ sở người dùng trên toàn cầu. 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ể vừa trích xuất văn bản thô vừa suy luận ý nghĩa của văn bản đó. Và nếu bạn cần tiếp cận đối tượng trên toàn cầu, hãy kết hợp tính năng này với API Google Dịch để dịch văn bản sang hơn 90 ngôn ngữ.
Google App Engine
Google App Engine là một "Nền tảng dưới dạng dịch vụ" tự động mở rộng quy mô logic phụ trợ để đáp ứng lượng lưu lượng truy cập mà nền tảng nhận được. Bạn chỉ cần tải mã phụ trợ lên và Google sẽ quản lý khả năng sử dụng ứng dụng của bạn; bạn không cần phải cung cấp hoặc duy trì máy chủ. App Engine là một cách nhanh chóng và đơn giản để tăng thêm sức mạnh xử lý hoặc thực thi đáng tin cậy cho ứng dụng Firebase.
Nếu bạn có một bộ chứa Cloud Storage mặc định có định dạng tên là PROJECT_ID.appspot.com
Môi trường chuẩn Java, Python và Go cho App Engine bao gồm API Hình ảnh App Engine (Java | Python | Go). API này 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 chuyển đổi phía máy khách, tương tự như Cloudinary và Imgix.
Khi nhập một dự án Google Cloud hiện có vào Firebase, nếu muốn cung cấp bất kỳ đối tượng App Engine hiện có nào trong Firebase, bạn cần đặt chế độ kiểm soát quyền truy cập mặc định trên các đối tượng để 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 gsutil
:
gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME
Những điều cần cân nhắc đối với tệp Firebase Security Rules và App Engine
Nếu bạn có một bộ chứa Cloud Storage mặc định có định dạng tên là *.appspot.com
Nếu định cấu hình Firebase Security Rules để truy cập công khai (không xác thực), bạn cũng sẽ cho phép truy cập công khai vào các tệp App Engine mới tải lên.
Các vấn đề đã biết về Cloud Storage và App Engine
Có hai trường hợp đã biết mà bạn không thể nhập ứng dụng App Engine:
- Dự án này chứa một ứng dụng App Engine Datastore Master/Slave cũ.
- Dự án có 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ể trợ giúp bạn.