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

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

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

ข้อมูลเมตาของไฟล์มีคุณสมบัติทั่วไป เช่น 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::สตริง> เลขที่
custom_metadata std::map<std::string, std::string> ใช่

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

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