ไฟล์ของคุณจัดเก็บไว้ในที่เก็บ ข้อมูล Cloud Storage ไฟล์ในบัคเก็ตนี้แสดงเป็นโครงสร้างแบบลำดับขั้น เช่นเดียวกับระบบไฟล์ในฮาร์ดดิสก์ในเครื่องของคุณ หรือข้อมูลใน Firebase Realtime Database ด้วยการสร้างการอ้างอิงไปยังไฟล์ แอปของคุณจะเข้าถึงไฟล์ได้ ข้อมูลอ้างอิงเหล่านี้สามารถใช้เพื่ออัปโหลดหรือดาวน์โหลดข้อมูล รับหรืออัปเดตข้อมูลเมตา หรือลบไฟล์ การอ้างอิงสามารถชี้ไปที่ไฟล์เฉพาะหรือโหนดระดับที่สูงกว่าในลำดับชั้น
หากคุณเคยใช้ Firebase Realtime Database เส้นทางเหล่านี้น่าจะคุ้นเคยกับคุณเป็นอย่างดี อย่างไรก็ตาม ข้อมูลไฟล์ของคุณจัดเก็บไว้ใน Cloud Storage ไม่ใช่ ใน Realtime Database
สร้างข้อมูลอ้างอิง
ในการอัปโหลดหรือดาวน์โหลดไฟล์ ลบไฟล์ หรือรับหรืออัปเดตข้อมูลเมตา คุณต้องสร้างการอ้างอิงถึงไฟล์ที่คุณต้องการดำเนินการ การอ้างอิงสามารถถือเป็นตัวชี้ไปยังไฟล์ในระบบคลาวด์ การอ้างอิงนั้นมีน้ำหนักเบา คุณจึงสร้างได้มากเท่าที่คุณต้องการ และยังสามารถใช้ซ้ำได้สำหรับการดำเนินการหลายอย่าง
หากต้องการสร้างข้อมูลอ้างอิง ให้รับอินสแตนซ์ของบริการ Storage โดยใช้ getStorage()
จากนั้นเรียก ref()
กับบริการเป็นอาร์กิวเมนต์ ข้อมูลอ้างอิงนี้ชี้ไปที่รูทของที่เก็บข้อมูล Cloud Storage ของคุณ
Web modular API
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 namespaced API
// 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'
โดยส่งเส้นทางนี้เป็นอาร์กิวเมนต์ที่สองเมื่อเรียก ref()
Web modular API
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 namespaced API
// 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
นำทางขึ้นไปหนึ่งระดับในขณะที่ root
นำทางไปจนถึงด้านบนสุด
Web modular API
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 namespaced API
// 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 modular API
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 namespaced API
// 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 modular API
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 namespaced API
// 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 modular API
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 namespaced API
// 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 กัน