ระบบจะจัดเก็บไฟล์ไว้ในที่เก็บข้อมูล Cloud Storage ไฟล์ในที่เก็บข้อมูลนี้จะแสดงในโครงสร้างแบบลำดับชั้น เช่นเดียวกับ ระบบไฟล์ในฮาร์ดดิสก์ในเครื่อง หรือข้อมูลใน Firebase Realtime Database การสร้างการอ้างอิงถึงไฟล์จะทำให้แอปของคุณมีสิทธิ์เข้าถึงไฟล์นั้น จากนั้นคุณจะใช้ข้อมูลอ้างอิงเหล่านี้เพื่ออัปโหลดหรือดาวน์โหลดข้อมูล รับหรืออัปเดตข้อมูลเมตา หรือลบไฟล์ได้ การอ้างอิงอาจชี้ไปยังไฟล์ที่เฉพาะเจาะจงหรือไปยังโหนดระดับที่สูงกว่า ในลำดับชั้นก็ได้
หากคุณเคยใช้ Firebase Realtime Database เส้นทางเหล่านี้จะ ดูคุ้นเคยเป็นอย่างยิ่ง อย่างไรก็ตาม ข้อมูลไฟล์จะจัดเก็บไว้ใน Cloud Storage ไม่ใช่ใน Realtime Database
สร้างการอ้างอิง
สร้างการอ้างอิงเพื่ออัปโหลด ดาวน์โหลด หรือลบไฟล์ หรือเพื่อรับหรืออัปเดตข้อมูลเมตาของไฟล์ คุณสามารถคิดว่าการอ้างอิง เป็นตัวชี้ไปยังไฟล์ในระบบคลาวด์ การอ้างอิงมีขนาดเล็ก คุณจึงสร้างได้มากเท่าที่ต้องการ และยังใช้ซ้ำได้สำหรับการดำเนินการหลายอย่าง
ระบบจะสร้างการอ้างอิงจากstorage
บริการในแอป Firebase โดยการเรียกใช้เมธอด GetReferenceFromUrl()
และส่ง URL ในรูปแบบ gs://<your-cloud-storage-bucket>
คุณดู URL นี้ได้ในส่วนพื้นที่เก็บข้อมูลของคอนโซล Firebase
// Get a reference to the storage service, using the default Firebase App Storage* storage = Storage::GetInstance(app); // Create a Cloud Storage reference from our storage service StorageReference storage_ref = storage->GetReferenceFromUrl("gs://<your-cloud-storage-bucket>");
คุณสร้างการอ้างอิงไปยังตำแหน่งที่อยู่ลึกลงไปในโครงสร้างได้
เช่น 'images/space.jpg'
โดยใช้วิธี child
กับการอ้างอิงที่มีอยู่
// Create a child reference // images_ref now points to "images" StorageReference images_ref = storage_ref.Child("images"); // Child references can also take paths delimited by '/' // space_ref now points to "images/space.jpg" // images_ref still points to "images" StorageReference space_ref = storage_ref.Child("images/space.jpg"); // This is equivalent to creating the full reference StorageReference space_ref = storage.GetReferenceFromUrl("gs://<your-cloud-storage-bucket>/images/space.jpg");
ไปยังส่วนต่างๆ ด้วยการอ้างอิง
นอกจากนี้ คุณยังใช้วิธี Parent
และ Root
เพื่อไปยังระดับบนในลำดับชั้นของไฟล์ได้ด้วย
Parent
จะไปยังระดับที่สูงขึ้น 1 ระดับ ส่วน Root
จะไปยังระดับบนสุด
// Parent allows us to move to the parent of a reference // images_ref now points to 'images' StorageReference images_ref = space_ref.Parent(); // Root allows us to move all the way back to the top of our bucket // root_ref now points to the root StorageReference root_ref = space_ref.Root();
Child
, Parent
และ Root
สามารถเชื่อมต่อกันได้หลายครั้ง เนื่องจากแต่ละรายการจะแสดงผลการอ้างอิง ข้อยกเว้นคือ Parent
ของ Root
ซึ่งเป็น StorageReference
ที่ไม่ถูกต้อง
// References can be chained together multiple times // earth_ref points to "images/earth.jpg" StorageReference earth_ref = space_ref.Parent().Child("earth.jpg"); // null_ref is null, since the parent of root is an invalid StorageReference StorageReference null_ref = space_ref.Root().Parent();
วิธีการอ้างอิง
คุณสามารถตรวจสอบการอ้างอิงเพื่อให้เข้าใจไฟล์ที่อ้างอิงได้ดียิ่งขึ้นโดยใช้วิธีการ full_path
, name
และ bucket
เมธอดเหล่านี้จะรับเส้นทางแบบเต็ม ชื่อ และที่เก็บข้อมูลของไฟล์
// Reference's path is: "images/space.jpg" // This is analogous to a file path on disk space_ref.full_path(); // Reference's name is the last segment of the full path: "space.jpg" // This is analogous to the file name space_ref.name(); // Reference's bucket is the name of the Cloud Storage bucket where files are stored space_ref.bucket();
ข้อจำกัดในการอ้างอิง
เส้นทางและชื่ออ้างอิงอาจมีลำดับอักขระ Unicode ที่ถูกต้องใดก็ได้ แต่จะมีข้อจำกัดบางอย่าง ได้แก่
- ความยาวทั้งหมดของ reference.fullPath ต้องอยู่ระหว่าง 1 ถึง 1024 ไบต์เมื่อเข้ารหัส UTF-8
- ไม่มีอักขระขึ้นบรรทัดใหม่หรืออักขระตัดบรรทัด
- หลีกเลี่ยงการใช้
#
,[
,]
,*
หรือ?
เนื่องจากเครื่องมือเหล่านี้ทำงานร่วมกับ เครื่องมืออื่นๆ เช่น Firebase Realtime Database หรือ gsutil ได้ไม่ดี
ตัวอย่างแบบเต็ม
Storage* storage = Storage::GetInstance(app); // Points to the root reference StorageReference storage_ref = storage->GetReferenceFromUrl("gs://<your-bucket-name>"); // Points to "images" StorageReference images_ref = storage_ref.Child("images"); // Points to "images/space.jpg" // Note that you can use variables to create child values std::string filename = "space.jpg"; StorageReference space_ref = images_ref.Child(filename); // File path is "images/space.jpg" std::string path = space_ref.full_path() // File name is "space.jpg" std::string name = space_ref.name() // Points to "images" StorageReference images_ref = space_ref.Parent();
ขั้นตอนถัดไป
ถัดไป เราจะมาดูวิธี อัปโหลดไฟล์ไปยัง Cloud Storageกัน