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