ระบบจะจัดเก็บไฟล์ของคุณไว้ใน Cloud Storage บัคเก็ต โดยไฟล์ในบัคเก็ตนี้จะแสดงในโครงสร้างแบบลำดับชั้น เช่นเดียวกับระบบไฟล์ในฮาร์ดดิสก์ในเครื่อง หรือข้อมูลใน Firebase Realtime Database เมื่อสร้างการอ้างอิงไปยังไฟล์ แอปของคุณจะได้รับสิทธิ์เข้าถึงไฟล์ดังกล่าว จากนั้นคุณจะใช้การอ้างอิงเหล่านี้เพื่ออัปโหลดหรือดาวน์โหลดข้อมูล รับหรืออัปเดตข้อมูลเมตา หรือลบไฟล์ได้ การอ้างอิงสามารถชี้ไปยังไฟล์ที่เฉพาะเจาะจงหรือโหนดระดับสูงกว่าในลำดับชั้นก็ได้
หากคุณเคยใช้ Firebase Realtime Database มาก่อน เส้นทางเหล่านี้ควรจะ คุ้นเคยกับคุณเป็นอย่างดี อย่างไรก็ตาม ระบบจะจัดเก็บข้อมูลไฟล์ไว้ใน Cloud Storage, ไม่ใช่ ใน Realtime Database
สร้างการอ้างอิง
หากต้องการอัปโหลดหรือดาวน์โหลดไฟล์ ลบไฟล์ หรือรับหรืออัปเดตข้อมูลเมตา คุณต้องสร้างการอ้างอิงไปยังไฟล์ที่ต้องการดำเนินการ คุณสามารถนึกถึงการอ้างอิงว่าเป็นตัวชี้ไปยังไฟล์ในระบบคลาวด์ การอ้างอิงมีขนาดเล็ก คุณจึงสร้างได้มากเท่าที่ต้องการ และยังนำไปใช้ซ้ำสำหรับการดำเนินการหลายอย่างได้ด้วย
หากต้องการสร้างการอ้างอิง ให้รับอินสแตนซ์ของบริการ Storage โดยใช้ getStorage() จากนั้นเรียก ref() ด้วยบริการเป็นอาร์กิวเมนต์
การอ้างอิงนี้จะชี้ไปยังรูทของบัคเก็ต Cloud Storage
Web
import { getStorage, ref } from "firebase/storage"; // Get a reference to the storage service, which is used to create references in your storage bucket const storage = getStorage(); // Create a storage reference from our storage service const storageRef = ref(storage);
Web
// Get a reference to the storage service, which is used to create references in your storage bucket var storage = firebase.storage(); // Create a storage reference from our storage service var storageRef = storage.ref();
คุณสามารถสร้างการอ้างอิงไปยังตำแหน่งที่ต่ำกว่าในโครงสร้างแบบต้นไม้,
เช่น 'images/space.jpg' โดยส่งเส้นทางนี้เป็นอาร์กิวเมนต์ที่ 2 เมื่อ
เรียก ref()
Web
import { getStorage, ref } from "firebase/storage"; const storage = getStorage(); // Create a child reference const imagesRef = ref(storage, 'images'); // imagesRef now points to 'images' // Child references can also take paths delimited by '/' const spaceRef = ref(storage, 'images/space.jpg'); // spaceRef now points to "images/space.jpg" // imagesRef still points to "images"
Web
// Create a child reference var imagesRef = storageRef.child('images'); // imagesRef now points to 'images' // Child references can also take paths delimited by '/' var spaceRef = storageRef.child('images/space.jpg'); // spaceRef now points to "images/space.jpg" // imagesRef still points to "images"
ไปยังส่วนต่างๆ ด้วยการอ้างอิง
นอกจากนี้ คุณยังใช้พร็อพเพอร์ตี้ parent และ root เพื่อไปยังส่วนต่างๆ ในลำดับชั้นของไฟล์ได้ด้วย parent จะไปยังส่วนต่างๆ ขึ้นไป 1 ระดับ ส่วน root จะไปยังส่วนต่างๆ ขึ้นไปจนถึงระดับบนสุด
Web
import { getStorage, ref } from "firebase/storage"; const storage = getStorage(); const spaceRef = ref(storage, 'images/space.jpg'); // Parent allows us to move to the parent of a reference const imagesRef = spaceRef.parent; // imagesRef now points to 'images' // Root allows us to move all the way back to the top of our bucket const rootRef = spaceRef.root; // rootRef now points to the root
Web
// Parent allows us to move to the parent of a reference var imagesRef = spaceRef.parent; // imagesRef now points to 'images' // Root allows us to move all the way back to the top of our bucket var rootRef = spaceRef.root; // rootRef now points to the root
child(), parent และ root สามารถเชื่อมโยงเข้าด้วยกันได้หลายครั้ง เนื่องจากแต่ละรายการจะแสดงผลการอ้างอิง ข้อยกเว้นคือ parent ของ root ซึ่งเป็น null
Web
import { getStorage, ref } from "firebase/storage"; const storage = getStorage(); const spaceRef = ref(storage, 'images/space.jpg'); // References can be chained together multiple times const earthRef = ref(spaceRef.parent, 'earth.jpg'); // earthRef points to 'images/earth.jpg' // nullRef is null, since the parent of root is null const nullRef = spaceRef.root.parent;
Web
// References can be chained together multiple times var earthRef = spaceRef.parent.child('earth.jpg'); // earthRef points to 'images/earth.jpg' // nullRef is null, since the parent of root is null var nullRef = spaceRef.root.parent;
พร็อพเพอร์ตี้การอ้างอิง
คุณสามารถตรวจสอบการอ้างอิงเพื่อทำความเข้าใจไฟล์ที่การอ้างอิงชี้ได้ดียิ่งขึ้นโดยใช้พร็อพเพอร์ตี้ fullPath, name และ bucket พร็อพเพอร์ตี้เหล่านี้จะแสดงผลเส้นทางแบบเต็มของไฟล์ ชื่อไฟล์ และบัคเก็ตที่จัดเก็บไฟล์
Web
import { getStorage, ref } from "firebase/storage"; const storage = getStorage(); const spaceRef = ref(storage, 'images/space.jpg'); // Reference's path is: 'images/space.jpg' // This is analogous to a file path on disk spaceRef.fullPath; // Reference's name is the last segment of the full path: 'space.jpg' // This is analogous to the file name spaceRef.name; // Reference's bucket is the name of the storage bucket where files are stored spaceRef.bucket;
Web
// Reference's path is: 'images/space.jpg' // This is analogous to a file path on disk spaceRef.fullPath; // Reference's name is the last segment of the full path: 'space.jpg' // This is analogous to the file name spaceRef.name; // Reference's bucket is the name of the storage bucket where files are stored spaceRef.bucket;
ข้อจำกัดของการอ้างอิง
เส้นทางการอ้างอิงและชื่ออาจมีการเรียงลำดับอักขระ Unicode ที่ถูกต้อง แต่จะมีข้อจำกัดบางอย่าง ได้แก่
- ความยาวทั้งหมดของ
reference.fullPathต้องอยู่ระหว่าง 1 ถึง 1024 ไบต์เมื่อเข้ารหัส UTF-8 - ไม่มีอักขระขึ้นบรรทัดใหม่หรือป้อนบรรทัด
- หลีกเลี่ยงการใช้
#,[,],*หรือ?เนื่องจากอักขระเหล่านี้ทำงานได้ไม่ดีกับ เครื่องมืออื่นๆ เช่น Firebase Realtime Database หรือ gsutil
ตัวอย่างแบบเต็ม
Web
import { getStorage, ref } from "firebase/storage"; const storage = getStorage(); // Points to the root reference const storageRef = ref(storage); // Points to 'images' const imagesRef = ref(storageRef, 'images'); // Points to 'images/space.jpg' // Note that you can use variables to create child values const fileName = 'space.jpg'; const spaceRef = ref(imagesRef, fileName); // File path is 'images/space.jpg' const path = spaceRef.fullPath; // File name is 'space.jpg' const name = spaceRef.name; // Points to 'images' const imagesRefAgain = spaceRef.parent;
Web
// Points to the root reference var storageRef = firebase.storage().ref(); // Points to 'images' var imagesRef = storageRef.child('images'); // Points to 'images/space.jpg' // Note that you can use variables to create child values var fileName = 'space.jpg'; var spaceRef = imagesRef.child(fileName); // File path is 'images/space.jpg' var path = spaceRef.fullPath; // File name is 'space.jpg' var name = spaceRef.name; // Points to 'images' var imagesRef = spaceRef.parent;
ต่อไปเราจะมาดูวิธี อัปโหลดไฟล์ไปยัง Cloud Storageกัน