หลังจากอัปโหลดไฟล์ไปยังข้อมูลอ้างอิง Cloud Storage แล้ว คุณยังสามารถรับหรืออัปเดตข้อมูลเมตาของไฟล์ได้ด้วย เช่น เพื่ออัปเดตประเภทเนื้อหา นอกจากนี้ ไฟล์ยังจัดเก็บคู่คีย์/ค่าที่กำหนดเองพร้อมข้อมูลเมตาของไฟล์เพิ่มเติมได้ด้วย
รับข้อมูลเมตาของไฟล์
ข้อมูลเมตาของไฟล์ประกอบด้วยพร็อพเพอร์ตี้ทั่วไป เช่น name, size และ contentType (มักเรียกว่าประเภท MIME) นอกเหนือจากพร็อพเพอร์ตี้ที่พบไม่บ่อยนัก เช่น contentDisposition และ timeCreated ข้อมูลเมตานี้สามารถดึงมาจากข้อมูลอ้างอิง Cloud Storage โดยใช้เมธอด getMetadata() getMetadata() จะแสดงผล Promise ที่มีข้อมูลเมตาที่สมบูรณ์ หรือแสดงข้อผิดพลาดหาก Promise ปฏิเสธ
Web
import { getStorage, ref, getMetadata } from "firebase/storage"; // Create a reference to the file whose metadata we want to retrieve const storage = getStorage(); const forestRef = ref(storage, 'images/forest.jpg'); // Get metadata properties getMetadata(forestRef) .then((metadata) => { // Metadata now contains the metadata for 'images/forest.jpg' }) .catch((error) => { // Uh-oh, an error occurred! });
Web
// Create a reference to the file whose metadata we want to retrieve var forestRef = storageRef.child('images/forest.jpg'); // Get metadata properties forestRef.getMetadata() .then((metadata) => { // Metadata now contains the metadata for 'images/forest.jpg' }) .catch((error) => { // Uh-oh, an error occurred! });
อัปเดตข้อมูลเมตาของไฟล์
คุณสามารถอัปเดตข้อมูลเมตาของไฟล์ได้ทุกเมื่อหลังจากอัปโหลดไฟล์เสร็จแล้วโดยใช้เมธอด updateMetadata() ดูข้อมูลเพิ่มเติมเกี่ยวกับพร็อพเพอร์ตี้ที่อัปเดตได้จากรายการทั้งหมด ระบบจะอัปเดตเฉพาะพร็อพเพอร์ตี้ที่ระบุในข้อมูลเมตาเท่านั้น ส่วนพร็อพเพอร์ตี้อื่นๆ ทั้งหมดจะไม่มีการแก้ไข updateMetadata() แสดง Promise ที่มีข้อมูลเมตาที่สมบูรณ์ หรือข้อผิดพลาดหาก Promise ปฏิเสธ
Web
import { getStorage, ref, updateMetadata } from "firebase/storage"; // Create a reference to the file whose metadata we want to change const storage = getStorage(); const forestRef = ref(storage, 'images/forest.jpg'); // Create file metadata to update const newMetadata = { cacheControl: 'public,max-age=300', contentType: 'image/jpeg' }; // Update metadata properties updateMetadata(forestRef, newMetadata) .then((metadata) => { // Updated metadata for 'images/forest.jpg' is returned in the Promise }).catch((error) => { // Uh-oh, an error occurred! });
Web
// Create a reference to the file whose metadata we want to change var forestRef = storageRef.child('images/forest.jpg'); // Create file metadata to update var newMetadata = { cacheControl: 'public,max-age=300', contentType: 'image/jpeg' }; // Update metadata properties forestRef.updateMetadata(newMetadata) .then((metadata) => { // Updated metadata for 'images/forest.jpg' is returned in the Promise }).catch((error) => { // Uh-oh, an error occurred! });
คุณลบพร็อพเพอร์ตี้ข้อมูลเมตาได้โดยตั้งค่าเป็น null ดังนี้
Web
import { getStorage, ref, updateMetadata } from "firebase/storage"; const storage = getStorage(); const forestRef = ref(storage, 'images/forest.jpg'); // Create file metadata with property to delete const deleteMetadata = { contentType: null }; // Delete the metadata property updateMetadata(forestRef, deleteMetadata) .then((metadata) => { // metadata.contentType should be null }).catch((error) => { // Uh-oh, an error occurred! });
Web
// Create file metadata with property to delete var deleteMetadata = { contentType: null }; // Delete the metadata property forestRef.updateMetadata(deleteMetadata) .then((metadata) => { // metadata.contentType should be null }).catch((error) => { // Uh-oh, an error occurred! });
จัดการข้อผิดพลาด
มีสาเหตุหลายประการที่อาจทำให้เกิดข้อผิดพลาดในการรับหรืออัปเดตข้อมูลเมตา ซึ่งรวมถึงไฟล์ไม่มีอยู่ หรือผู้ใช้ไม่มีสิทธิ์เข้าถึงไฟล์ที่ต้องการ ดูข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาดได้ในส่วนจัดการข้อผิดพลาดของเอกสาร
ข้อมูลเมตาที่กำหนดเอง
คุณระบุข้อมูลเมตาที่กำหนดเองเป็นออบเจ็กต์ที่มีพร็อพเพอร์ตี้ String ได้
Web
const metadata = { customMetadata: { 'location': 'Yosemite, CA, USA', 'activity': 'Hiking' } };
Web
var metadata = { customMetadata: { 'location': 'Yosemite, CA, USA', 'activity': 'Hiking' } };
คุณสามารถใช้ข้อมูลเมตาที่กำหนดเองเพื่อจัดเก็บข้อมูลเฉพาะแอปเพิ่มเติมสำหรับแต่ละไฟล์ แต่เราขอแนะนำอย่างยิ่งให้ใช้ฐานข้อมูล (เช่น Firebase Realtime Database) เพื่อจัดเก็บและซิงค์ข้อมูลประเภทนี้
พร็อพเพอร์ตี้ข้อมูลเมตาของไฟล์
ดูรายการพร็อพเพอร์ตี้ข้อมูลเมตาทั้งหมดในไฟล์ได้ที่ด้านล่าง
| พร็อพเพอร์ตี้ | ประเภท | เขียนได้ |
|---|---|---|
bucket |
สตริง | ไม่ |
generation |
สตริง | ไม่ |
metageneration |
สตริง | ไม่ |
fullPath |
สตริง | ไม่ |
name |
สตริง | ไม่ |
size |
ตัวเลข | ไม่ |
timeCreated |
สตริง | ไม่ |
updated |
สตริง | ไม่ |
md5Hash |
สตริง | YES ในการอัปโหลด, NO ใน updateMetadata |
cacheControl |
สตริง | ใช่ |
contentDisposition |
สตริง | ใช่ |
contentEncoding |
สตริง | ใช่ |
contentLanguage |
สตริง | ใช่ |
contentType |
สตริง | ใช่ |
customMetadata |
ออบเจ็กต์ที่มีการแมปสตริง->สตริง | ใช่ |
การอัปโหลด ดาวน์โหลด และอัปเดตไฟล์เป็นสิ่งสำคัญ แต่การนำไฟล์ออกก็สำคัญไม่แพ้กัน มาดูวิธีลบไฟล์จาก Cloud Storage กัน