ใช้ข้อมูลเมตาของไฟล์กับ Cloud Storage สำหรับ C++

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

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

ข้อมูลเมตาของไฟล์ประกอบด้วยพร็อพเพอร์ตี้ทั่วไป เช่น name, size และ content_type (มักเรียกว่าประเภท MIME) นอกเหนือจากพร็อพเพอร์ตี้ที่พบไม่บ่อยนัก เช่น content_disposition และ time_created คุณจะดึงข้อมูลเมตานี้มาจากข้อมูลอ้างอิงของ Cloud Storage ได้โดยใช้เมธอด GetMetadata

// Create reference to the file whose metadata we want to retrieve
StorageReference forest_ref = storage_ref.Child("images/forest.jpg");

// Get metadata properties
Future future = forest_ref.GetMetadata();

// Wait for Future to complete...

if (future.Error() != firebase::storage::kErrorNone) {
  // Uh-oh, an error occurred!
} else {
  // We can now retrieve the metadata for 'images/forest.jpg'
  Metadata* metadata = future.Result();
}

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

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

// Create reference to the file whose metadata we want to change
firebase::storage::StorageReference forest_ref = storage_ref.child("images/forest.jpg");

// Create file metadata to update
Metadata new_metadata;
newMetadata.set_cache_control("public,max-age=300");
newMetadata.set_content_type("image/jpeg");

// Update metadata properties
Future future = forest_ref.UpdateMetadata(new_metadata);

// Wait for Future to complete...

if (future.Error() != firebase::storage::kErrorNone) {
  // Uh-oh, an error occurred!
} else {
  // We can now retrieve the updated metadata for 'images/forest.jpg'
  Metadata* metadata = future.Result();
}

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

// Create file metadata with property to delete
StorageMetadata new_metadata;
new_metadata.set_content_type("");

// Delete the metadata property
Future future = forest_ref.UpdateMetadata(new_metadata);

// Wait for Future to complete...

if (future.Error() != 0) {
  // Uh-oh, an error occurred!
} else {
  // metadata.content_type() should be an empty string
  Metadata* metadata = future.Result();
}

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

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

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

คุณระบุข้อมูลเมตาที่กำหนดเองเป็น std::map ที่มีพร็อพเพอร์ตี้ std::string ได้

std::map* custom_metadata = metadata.custom_metadata();
custom_metadata->insert(std::make_pair("location", "Yosemite, CA, USA");
custom_metadata->insert(std::make_pair("activity", "Hiking");

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

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

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

พร็อพเพอร์ตี้ ประเภท เขียนได้
bucket อักขระ Const* ไม่
generation อักขระ Const* ไม่
metageneration อักขระ Const* ไม่
full_path อักขระ Const* ไม่
name อักขระ Const* ไม่
size int64_t ไม่
time_created int64_t ไม่
updated int64_t ไม่
cache_control อักขระ Const* ใช่
content_disposition อักขระ Const* ใช่
content_encoding อักขระ Const* ใช่
content_language อักขระ Const* ใช่
content_type อักขระ Const* ใช่
download_urls std::vector<std::string> ไม่
custom_metadata std::map<std::string, std::string> ใช่

ขั้นตอนถัดไป

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