หลังจากอัปโหลดไฟล์ไปยังการอ้างอิง 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 Futurefuture = 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 Futurefuture = 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 Futurefuture = 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<std::string, std::string>* custom_metadata = metadata.custom_metadata(); custom_metadata->insert(std::make_pair("location", "Yosemite, CA, USA"); custom_metadata->insert(std::make_pair("activity", "Hiking");
คุณสามารถจัดเก็บข้อมูลที่เจาะจงแอปสำหรับแต่ละไฟล์ในข้อมูลเมตาที่กำหนดเองได้ แต่เราขอแนะนำอย่างยิ่งให้ใช้ฐานข้อมูล (เช่น Firebase Realtime Database) เพื่อจัดเก็บและซิงค์ข้อมูลประเภทนี้
พร็อพเพอร์ตี้ข้อมูลเมตาของไฟล์
รายการพร็อพเพอร์ตี้ข้อมูลเมตาทั้งหมดในไฟล์มีดังนี้
พร็อพเพอร์ตี้ | ประเภท | เขียนได้ |
---|---|---|
bucket |
const char* | ไม่ |
generation |
const char* | ไม่ |
metageneration |
const char* | ไม่ |
full_path |
const char* | ไม่ |
name |
const char* | ไม่ |
size |
int64_t | ไม่ |
time_created |
int64_t | ไม่ |
updated |
int64_t | ไม่ |
cache_control |
const char* | ใช่ |
content_disposition |
const char* | ใช่ |
content_encoding |
const char* | ใช่ |
content_language |
const char* | ใช่ |
content_type |
const char* | ใช่ |
download_urls |
std::vector<std::string> | ไม่ |
custom_metadata |
std::map<std::string, std::string> | ใช่ |
ขั้นตอนถัดไป
การอัปโหลด ดาวน์โหลด และอัปเดตไฟล์เป็นเรื่องสำคัญ แต่ความสามารถในการนำไฟล์ออกก็สำคัญเช่นกัน มาเรียนรู้วิธีลบไฟล์จาก Cloud Storage