สร้างข้อมูลอ้างอิงของ Cloud Storage บนเว็บ

ระบบจะจัดเก็บไฟล์ไว้ในที่เก็บข้อมูล 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 ที่ถูกต้อง แต่มีข้อจํากัดบางอย่าง ได้แก่

  1. ความยาวทั้งหมดของ reference.fullPath ต้องอยู่ระหว่าง 1 ถึง 1,024 ไบต์เมื่อเข้ารหัส UTF-8
  2. ไม่มีอักขระขึ้นบรรทัดใหม่หรือตัดบรรทัด
  3. หลีกเลี่ยงการใช้ #, [, ], * หรือ ? เนื่องจากใช้ร่วมกับเครื่องมืออื่นๆ เช่น 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