ใช้ข้อมูลเมตาของไฟล์กับ Cloud Storage บน Flutter

หลังจากอัปโหลดไฟล์ไปยังการอ้างอิงใน Cloud Storage แล้ว คุณจะดูและอัปเดตข้อมูลเมตาของไฟล์ได้ด้วย เช่น เพื่อดูหรืออัปเดตประเภทเนื้อหา Files ยังสามารถจัดเก็บคู่คีย์/ค่าที่กำหนดเองพร้อมกับข้อมูลเมตาเพิ่มเติมของไฟล์ได้ด้วย

รับข้อมูลเมตาของไฟล์

ข้อมูลเมตาของไฟล์มีพร็อพเพอร์ตี้ทั่วไป เช่น name, size และ contentType (มักเรียกว่าประเภท MIME) นอกเหนือจากพร็อพเพอร์ตี้ที่คล้ายกัน เช่น contentDisposition และ timeCreated ข้อมูลเมตานี้สามารถดึงมาจากข้อมูลอ้างอิง Cloud Storage โดยใช้เมธอด getMetadata()

// Create reference to the file whose metadata we want to retrieve
final forestRef = storageRef.child("images/forest.jpg");

// Get metadata properties
final metadata = await forestRef.getMetadata();

// Metadata now contains the metadata for 'images/forest.jpg'

อัปเดตข้อมูลเมตาของไฟล์

คุณสามารถอัปเดตข้อมูลเมตาของไฟล์ได้ทุกเมื่อหลังจากการอัปโหลดไฟล์เสร็จสมบูรณ์โดยใช้วิธีการ updateMetadata() ดูรายการทั้งหมดเกี่ยวกับที่พักที่อัปเดตได้ ระบบจะอัปเดตเฉพาะพร็อพเพอร์ตี้ที่ระบุไว้ในข้อมูลเมตาเท่านั้น ส่วนพร็อพเพอร์ตี้อื่นๆ ทั้งหมดจะไม่มีการแก้ไข

// Create reference to the file whose metadata we want to change
final forestRef = storageRef.child("images/forest.jpg");

// Create file metadata to update
final newMetadata = SettableMetadata(
  cacheControl: "public,max-age=300",
  contentType: "image/jpeg",
);

// Update metadata properties
final metadata = await forestRef.updateMetadata(newMetadata);

// Updated metadata for 'images/forest.jpg' is returned

คุณสามารถลบพร็อพเพอร์ตี้ข้อมูลเมตาที่เขียนได้โดยการส่งผ่าน null:

// Delete the cacheControl property
final newMetadata = SettableMetadata(cacheControl: null);
final metadata = await forestRef.updateMetadata(newMetadata);

จัดการข้อผิดพลาด

ข้อผิดพลาดที่อาจเกิดขึ้นเมื่อรับหรืออัปเดตข้อมูลเมตามีได้หลายสาเหตุ เช่น ไฟล์ไม่อยู่ หรือผู้ใช้ไม่มีสิทธิ์เข้าถึงไฟล์ที่ต้องการ ดูข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาดได้ในส่วนจัดการข้อผิดพลาดของเอกสาร

ข้อมูลเมตาที่กำหนดเอง

คุณสามารถระบุข้อมูลเมตาที่กำหนดเองได้โดยใช้พารามิเตอร์ customMetadata ของคอนสตรัคเตอร์ SettableMetadata ดังนี้

// Create reference to the file whose metadata we want to change
final forestRef = storageRef.child("images/forest.jpg");

// Create file metadata to update
final newCustomMetadata = SettableMetadata(
  customMetadata: {
    "location": "Yosemite, CA, USA",
    "activity": "Hiking",
  },
);

// Update metadata properties
final metadata = await forestRef.updateMetadata(newCustomMetadata);

// Updated metadata for 'images/forest.jpg' is returned

คุณจัดเก็บข้อมูลเฉพาะแอปสำหรับแต่ละไฟล์ในข้อมูลเมตาที่กำหนดเองได้ แต่เราขอแนะนำให้ใช้ฐานข้อมูล (เช่น ฐานข้อมูลเรียลไทม์ของ Firebase) ในการจัดเก็บและซิงค์ข้อมูลประเภทนี้

พร็อพเพอร์ตี้ข้อมูลเมตาของไฟล์

รายการพร็อพเพอร์ตี้ข้อมูลเมตาทั้งหมดในไฟล์มีดังนี้

พร็อพเพอร์ตี้ ประเภท ตั้งค่าได้หรือไม่
bucket String ไม่
generation String ไม่ใช่
metageneration String ไม่ใช่
metadataGeneration String ไม่ใช่
fullPath String ไม่ใช่
name String ไม่ใช่
size int ไม่ใช่
timeCreated DateTime ไม่ใช่
updated DateTime ไม่ใช่
md5Hash String ไม่ได้
cacheControl String ใช่
contentDisposition String ใช่
contentEncoding String ใช่
contentLanguage String ใช่
contentType String ใช่
customMetadata Map<String, String> ใช่

การอัปโหลด ดาวน์โหลด และอัปเดตไฟล์เป็นเรื่องสำคัญ แต่ความสามารถในการนำไฟล์ออกก็สำคัญเช่นกัน มาเรียนรู้วิธีลบไฟล์จาก Cloud Storage กัน