โปรเจ็กต์ Firebase เป็นเพียงGoogle Cloudโปรเจ็กต์ที่เปิดใช้การกำหนดค่าและบริการเพิ่มเติมสำหรับ Firebase เท่านั้น ซึ่งหมายความว่าคุณเข้าถึงที่เก็บข้อมูล Cloud Storage ทั้งหมดที่ใช้กับ Cloud Storage for Firebase ได้ในส่วน Google Cloud (รวมถึงคอนโซลและ API ของ Google Cloud)
การผสานรวมกับ Google Cloud รวมถึงการนําเข้าที่เก็บข้อมูล Cloud Storage ที่มีอยู่ต้องใช้โปรเจ็กต์ Firebase ในแพ็กเกจราคาแบบจ่ายตามการใช้งานจริงของ Blaze
สิ่งที่ควรทราบเกี่ยวกับบัญชีบริการ
Firebase ใช้Google Cloudบัญชีบริการเพื่อดำเนินการและจัดการบริการต่างๆ โดยไม่มีการแชร์ข้อมูลเข้าสู่ระบบของผู้ใช้ เมื่อสร้างโปรเจ็กต์ Firebase ที่ใช้ Cloud Storage คุณอาจเห็นว่าโปรเจ็กต์มีบัญชีบริการที่เกี่ยวข้องอยู่แล้ว นั่นคือ
โปรดดูข้อมูลเพิ่มเติมที่หัวข้อภาพรวมบัญชีบริการ Firebase
Google Cloud Storage
คุณสามารถใช้ Google Cloud Storage API เพื่อเข้าถึงไฟล์ที่อัปโหลดผ่าน Firebase SDK สำหรับ Cloud Storage โดยเฉพาะเพื่อดำเนินการที่ซับซ้อนมากขึ้น เช่น การคัดลอกหรือย้ายไฟล์ หรือแสดงรายการไฟล์ทั้งหมดที่มีอยู่ในข้อมูลอ้างอิง
โปรดทราบว่าคำขอเหล่านี้ใช้ Google Cloud Storage ตัวเลือกการควบคุมการเข้าถึงแทน Firebase Authentication และ Cloud Storage Security Rules
API
นอกจาก Firebase SDK สำหรับ Cloud Storage แล้ว ยังมีวิธีอื่นๆ อีกหลายวิธีในการเข้าถึงข้อมูลที่จัดเก็บไว้ในที่เก็บข้อมูล Cloud Storage โดยขึ้นอยู่กับสิ่งที่คุณต้องการทำ หากคุณกำลังเข้าถึงข้อมูลในเซิร์ฟเวอร์ เรามีไลบรารีฝั่งเซิร์ฟเวอร์ รวมถึง XML
RESTful API ที่ใช้งานร่วมกับ JSON
และ S3 ได้ หรือหากต้องการเขียนสคริปต์การเปลี่ยนแปลงหรือทำงานด้านการดูแลระบบอื่นๆ เรามีเครื่องมือบรรทัดคำสั่งที่มีประโยชน์
Google Cloud SDK ของเซิร์ฟเวอร์
Google Cloud มี SDK ของเซิร์ฟเวอร์คุณภาพสูงสำหรับผลิตภัณฑ์ระบบคลาวด์หลายรายการ รวมถึง Cloud Storage ไลบรารีเหล่านี้มีให้บริการใน Node.js, Java, Go, Python, PHP และ Ruby
ดูข้อมูลเพิ่มเติม รวมถึงวิธีการติดตั้ง การตรวจสอบสิทธิ์ และการแก้ปัญหาได้ในเอกสารประกอบเฉพาะแพลตฟอร์มที่ลิงก์ไว้ด้านบน
ตัวอย่างการใช้งาน Google Cloud Storage SDK แสดงอยู่ด้านล่าง
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();
Go
// 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}"
REST API
หากคุณใช้ภาษาที่ไม่มีไลบรารีของไคลเอ็นต์ ต้องการทําสิ่งที่ไลบรารีของไคลเอ็นต์ทําไม่ได้ หรือเพียงแค่มีไคลเอ็นต์ HTTP ที่ต้องการใช้ Google Cloud Storage มี API สําหรับทั้ง JSON และ XML
นอกจาก API การเข้าถึงข้อมูลพื้นที่เก็บข้อมูลเหล่านี้แล้ว คุณยังใช้ Cloud Storage for Firebase API เพื่อจัดการที่เก็บข้อมูล Cloud Storage สำหรับใช้ในโปรเจ็กต์ Firebase ได้ด้วย
gsutil
gsutil
เป็นเครื่องมือบรรทัดคำสั่งที่ให้สิทธิ์เข้าถึง Cloud Storage โดยตรง คุณสามารถใช้ gsutil
เพื่อทำงานด้านการจัดการที่เก็บข้อมูลและออบเจ็กต์ได้หลากหลาย เช่น
- การอัปโหลด การดาวน์โหลด และการลบออบเจ็กต์
- แสดงรายการที่เก็บข้อมูลและออบเจ็กต์
- การย้าย คัดลอก และเปลี่ยนชื่อออบเจ็กต์
- การแก้ไข ACL ของออบเจ็กต์และที่เก็บข้อมูล
gsutil
อนุญาตให้ดำเนินการขั้นสูงอื่นๆ เช่น ย้ายไฟล์จากไดเรกทอรีหนึ่งไปยังอีกไดเรกทอรีหนึ่ง หรือลบไฟล์ทั้งหมดที่อยู่ด้านล่างตำแหน่งหนึ่งๆ
การย้ายไฟล์ทั้งหมดจากข้อมูลอ้างอิงหนึ่งไปยังอีกข้อมูลอ้างอิงหนึ่งนั้นทำได้ง่ายเพียงทำดังนี้
gsutil mv gs://bucket/old/reference gs://bucket/new/reference
การลบไฟล์ทั้งหมดที่อยู่ด้านล่างข้อมูลอ้างอิงพร้อมกันนั้นทำได้ง่ายเช่นกัน โดยทำดังนี้
# 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
ขอราคา
Google Cloud Storage เป็นบริการที่ปรับขนาดได้สูงซึ่งใช้เทคโนโลยีการปรับขนาดอัตโนมัติเพื่อให้ได้อัตราการส่งคำขอที่สูงมาก
Google Cloud Storage เป็นบริการแบบหลายผู้เช่า ซึ่งหมายความว่าผู้ใช้จะแชร์ชุดทรัพยากรพื้นฐานเดียวกัน ถังมีขีดจํากัด IO เริ่มต้นเพื่อให้ใช้ทรัพยากรที่แชร์เหล่านี้ได้อย่างคุ้มค่าที่สุด
เมื่อวางแผนที่จะผสานรวม Cloud Storage for Firebase เข้ากับแอป ให้พิจารณาอัตราการส่งคำขอขั้นต่ำที่แอปต้องมีเพื่อให้มีประสิทธิภาพดี และพิจารณาการส่งคำขออย่างมีประสิทธิภาพ ตรวจสอบหลักเกณฑ์เกี่ยวกับอัตราการส่งคำขอ และโดยเฉพาะการเพิ่มอัตราการส่งคำขอ
การกำหนดเวอร์ชันออบเจ็กต์
คุณเคยลบข้อมูลโดยไม่ตั้งใจและไม่มีข้อมูลสำรองไหม
Google Cloud Storage รองรับการจัดการเวอร์ชันออบเจ็กต์ ซึ่งเป็นวิธีสำรองข้อมูลโดยอัตโนมัติและกู้คืนจากข้อมูลสำรองเหล่านั้น คุณเปิดใช้การกำหนดเวอร์ชันออบเจ็กต์ได้โดยใช้คำสั่ง gsutil
versioning set
ดังนี้
gsutil versioning set on gs://<your-cloud-storage-bucket>
Cloud Storage จะเลือกเวอร์ชันล่าสุดเสมอ ดังนั้นหากต้องการกู้คืนออบเจ็กต์ คุณต้องใช้ API หรือเครื่องมืออื่นๆ รายการใดรายการหนึ่งข้างต้นเพื่อตั้งค่าออบเจ็กต์ที่ต้องการเป็นเวอร์ชันล่าสุด
การจัดการอายุการใช้งานของออบเจ็กต์
ความสามารถในการเก็บหรือลบไฟล์ที่ล้าสมัยโดยอัตโนมัติเป็นฟีเจอร์ที่มีประโยชน์สำหรับแอปพลิเคชันหลายรายการ แต่โชคดีที่ Google Cloud Storage มีการจัดการอายุการใช้งานของออบเจ็กต์ ซึ่งช่วยให้คุณลบหรือเก็บออบเจ็กต์หลังจากผ่านไประยะเวลาหนึ่งได้
ลองพิจารณาแอปพลิเคชันการแชร์รูปภาพที่ต้องการให้ลบรูปภาพทั้งหมดภายใน 1 วัน คุณตั้งค่านโยบายเกี่ยวกับอายุการใช้งานของออบเจ็กต์ได้โดยทำดังนี้
// lifecycle.json { "lifecycle": { "rule": [ { "action": {"type": "Delete"}, "condition": {"age": 1} } ] } }
และทำให้ใช้งานได้โดยใช้คำสั่ง gsutil
lifecycle set
gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>
โปรดทราบว่าการดำเนินการนี้จะมีผลกับไฟล์ทั้งหมดในที่เก็บข้อมูล ดังนั้นหากคุณจัดเก็บข้อมูลสำรองที่สำคัญของผู้ใช้ที่ต้องการเก็บไว้เป็นเวลานานควบคู่ไปกับรูปภาพที่ต้องการลบทุกวัน คุณอาจต้องใช้ที่เก็บข้อมูล 2 ที่แยกกัน หรือดำเนินการลบด้วยตนเองโดยใช้ gsutil
หรือเซิร์ฟเวอร์ของคุณเอง
Google Cloud Functions (เบต้า)
Google Cloud Functions คือโซลูชันประมวลผลแบบไม่พร้อมกันที่ใช้งานง่ายและอิงตามเหตุการณ์ ซึ่งให้คุณสร้างฟังก์ชันขนาดเล็กวัตถุประสงค์เดียวที่ตอบสนองต่อเหตุการณ์ โดยไม่จำเป็นต้องจัดการเซิร์ฟเวอร์หรือสภาพแวดล้อมรันไทม์ ฟังก์ชันเหล่านี้สามารถใช้สำหรับการแปลงวิดีโอ การจัดหมวดหมู่รูปภาพโดยใช้แมชชีนเลิร์นนิง หรือซิงค์ข้อมูลเมตากับ Firebase Realtime Database Cloud Functions เป็นวิธีที่รวดเร็วที่สุดในการตอบสนองต่อการเปลี่ยนแปลงใน Cloud Storage เนื่องจากมีค่าใช้จ่ายเพิ่มเติมน้อยกว่า App Engine
Google Cloud Vision API
Google Cloud Vision API ช่วยให้นักพัฒนาซอฟต์แวร์เข้าใจเนื้อหาของรูปภาพด้วยการรวมโมเดลแมชชีนเลิร์นนิงที่มีประสิทธิภาพไว้ใน API ที่ใช้งานง่าย โดยสามารถจัดหมวดหมู่รูปภาพได้อย่างรวดเร็วเป็นหมวดหมู่ต่างๆ นับพันหมวดหมู่ ตรวจจับวัตถุและใบหน้าแต่ละรายการภายในรูปภาพ ค้นหาและอ่านคำที่พิมพ์ในรูปภาพ ระบุเนื้อหาที่ทำให้เกิดความไม่พอใจ และแม้แต่ให้การวิเคราะห์ความรู้สึกในรูปภาพ
Google Cloud Speech API
Google Cloud Speech API ช่วยให้นักพัฒนาซอฟต์แวร์ดึงข้อความจากไฟล์เสียงที่เก็บไว้ใน Cloud Storage ได้เช่นเดียวกับ Vision API API นี้รองรับภาษาและรูปแบบต่างๆ กว่า 80 ภาษาเพื่อรองรับฐานผู้ใช้ทั่วโลก เมื่อใช้ร่วมกับ Google Cloud Natural Language API นักพัฒนาแอปจะดึงข้อมูลข้อความดิบและอนุมานความหมายของข้อความนั้นได้ และหากต้องการกลุ่มเป้าหมายทั่วโลก ให้ใช้ร่วมกับ Google Translate API เพื่อแปลข้อความเป็นภาษาต่างๆ กว่า 90 ภาษา
Google App Engine
Google App Engine เป็น "แพลตฟอร์มในฐานะบริการ" ที่ปรับขนาดตรรกะแบ็กเอนด์โดยอัตโนมัติเพื่อตอบสนองต่อปริมาณการเข้าชมที่ได้รับ เพียงอัปโหลดโค้ดแบ็กเอนด์ แล้ว Google จะจัดการความพร้อมให้บริการของแอปให้คุณ คุณจึงไม่ต้องจัดสรรหรือดูแลรักษาเซิร์ฟเวอร์ App Engine เป็นวิธีที่รวดเร็วและตรงไปตรงมาในการเพิ่มกำลังการประมวลผลหรือการดำเนินการที่เชื่อถือได้ให้กับแอปพลิเคชัน Firebase
หากคุณมีที่เก็บข้อมูล Cloud Storage เริ่มต้นที่มีรูปแบบชื่อ PROJECT_ID.appspot.com
สภาพแวดล้อมมาตรฐานของ Java, Python และ Go สำหรับ App Engine ประกอบด้วย App Engine Images API (Java | Python | Go) ซึ่งสามารถปรับขนาด หมุน พลิก และครอบตัดรูปภาพ รวมถึงแสดง URL ที่แสดงรูปภาพ ซึ่งช่วยให้มีการเปลี่ยนรูปแบบฝั่งไคลเอ็นต์ได้ คล้ายกับ Cloudinary และ Imgix
เมื่อนําเข้าโปรเจ็กต์ Google Cloud ที่มีอยู่ไปยัง Firebase หากต้องการทําให้ออบเจ็กต์ App Engine ที่มีอยู่พร้อมใช้งานใน Firebase คุณจะต้องตั้งค่าการควบคุมการเข้าถึงเริ่มต้นในออบเจ็กต์เพื่ออนุญาตให้ Firebase เข้าถึงได้โดยการรันคําสั่งต่อไปนี้โดยใช้ gsutil
gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME
ข้อควรพิจารณาสำหรับไฟล์ Firebase Security Rules และ App Engine
หากคุณมีที่เก็บข้อมูล Cloud Storage เริ่มต้นที่มีรูปแบบชื่อเป็น *.appspot.com
หากคุณกำหนดค่า Firebase Security Rules สำหรับการเข้าถึงแบบสาธารณะ (ไม่มีการตรวจสอบสิทธิ์) ก็จะทําให้ไฟล์ App Engine ที่อัปโหลดใหม่เข้าถึงได้แบบสาธารณะด้วย
ปัญหาที่ทราบสำหรับ Cloud Storage และ App Engine
กรณีที่ทราบแล้วซึ่งคุณจะนําเข้าแอป App Engine ไม่ได้มี 2 กรณีดังนี้
- โปรเจ็กต์มีแอป App Engine Datastore Master/Slave เดิม
- โปรเจ็กต์มีรหัสโปรเจ็กต์ที่มีโดเมนนำหน้า เช่น
domain.com:project-1234
ไม่ว่าในกรณีใด โปรเจ็กต์จะไม่รองรับ Cloud Storage for Firebase และคุณควรสร้างโปรเจ็กต์ Firebase ใหม่เพื่อใช้ Cloud Storage โปรดติดต่อทีมสนับสนุนเพื่อให้เราช่วยเหลือคุณ