ระบบจะจัดเก็บไฟล์ไว้ในที่เก็บข้อมูล Cloud Storage ไฟล์ในที่เก็บข้อมูลนี้จะแสดงในโครงสร้างแบบลําดับชั้น เช่นเดียวกับระบบไฟล์ในฮาร์ดดิสก์ในเครื่อง หรือข้อมูลใน Firebase Realtime Database การสร้างการอ้างอิงถึงไฟล์จะทำให้แอปของคุณมีสิทธิ์เข้าถึงไฟล์นั้น จากนั้นจึงใช้ข้อมูลอ้างอิงเหล่านี้เพื่ออัปโหลดหรือดาวน์โหลดข้อมูล รับหรืออัปเดตข้อมูลเมตา หรือลบไฟล์ได้ การอ้างอิงอาจชี้ไปยังไฟล์ที่เฉพาะเจาะจงหรือโหนดในระดับที่สูงขึ้นในลําดับชั้นก็ได้
หากคุณเคยใช้ Firebase Realtime Database เส้นทางเหล่านี้จะดูคุ้นเคยมาก อย่างไรก็ตาม ข้อมูลไฟล์จะจัดเก็บอยู่ใน Cloud Storage ไม่ใช่ใน Realtime Database
สร้างการอ้างอิง
หากต้องการอัปโหลดหรือดาวน์โหลดไฟล์ ลบไฟล์ หรือรับหรืออัปเดตข้อมูลเมตา คุณต้องสร้างการอ้างอิงไปยังไฟล์ที่ต้องการดำเนินการ คุณสามารถคิดว่าการอ้างอิงเป็นเคอร์เซอร์ไปยังไฟล์ในระบบคลาวด์ ข้อมูลอ้างอิงมีขนาดเล็ก คุณจึงสร้างได้มากเท่าที่ต้องการ และยังนํากลับมาใช้ใหม่ได้สําหรับการดำเนินการหลายรายการ
หากต้องการสร้างการอ้างอิง ให้รับอินสแตนซ์ของบริการพื้นที่เก็บข้อมูลโดยใช้ 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 ถึง 1,024 ไบต์เมื่อเข้ารหัส 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