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

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

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

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

Swift

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

// Get metadata properties
do {
  let metadata = try await forestRef.getMetadata()
} catch {
  // ...
}
    

Objective-C

// Create reference to the file whose metadata we want to retrieve
FIRStorageReference *forestRef = [storageRef child:@"images/forest.jpg"];

// Get metadata properties
[forestRef metadataWithCompletion:^(FIRStorageMetadata *metadata, NSError *error) {
  if (error != nil) {
    // Uh-oh, an error occurred!
  } else {
    // Metadata now contains the metadata for 'images/forest.jpg'
  }
}];
  

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

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

Swift

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

// Create file metadata to update
let newMetadata = StorageMetadata()
newMetadata.cacheControl = "public,max-age=300"
newMetadata.contentType = "image/jpeg"

// Update metadata properties
do {
  let updatedMetadata = try await forestRef.updateMetadata(newMetadata)
} catch {
  // ...
}
    

Objective-C

// Create reference to the file whose metadata we want to change
FIRStorageReference *forestRef = [storageRef child:@"images/forest.jpg"];

// Create file metadata to update
FIRStorageMetadata *newMetadata = [[FIRStorageMetadata alloc] init];
newMetadata.cacheControl = @"public,max-age=300";
newMetadata.contentType = @"image/jpeg";

// Update metadata properties
[forestRef updateMetadata:newMetadata completion:^(FIRStorageMetadata *metadata, NSError *error){
  if (error != nil) {
    // Uh-oh, an error occurred!
  } else {
    // Updated metadata for 'images/forest.jpg' is returned
  }
}];
  

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

Objective-C

FIRStorageMetadata *newMetadata = [[FIRStorageMetadata alloc] init];
newMetadata.contentType = nil;

// Delete the metadata property
[forestRef updateMetadata:newMetadata completion:^(FIRStorageMetadata *metadata, NSError *error){
  if (error != nil) {
    // Uh-oh, an error occurred!
  } else {
    // metadata.contentType should be nil
  }
}];

Swift

let newMetadata = StorageMetadata()
newMetadata.contentType = nil

do {
  // Delete the metadata property
  let updatedMetadata = try await forestRef.updateMetadata(newMetadata)
} catch {
  // ...
}

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

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

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

คุณสามารถระบุข้อมูลเมตาที่กำหนดเองเป็น NSDictionary ที่มี NSString พร็อพเพอร์ตี้

Swift

let metadata = [
  "customMetadata": [
    "location": "Yosemite, CA, USA",
    "activity": "Hiking"
  ]
]
    

Objective-C

NSDictionary *metadata = @{
  @"customMetadata": @{
    @"location": @"Yosemite, CA, USA",
    @"activity": @"Hiking"
  }
};

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

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

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

พร็อพเพอร์ตี้ ประเภท เขียนได้
bucket สตริง ไม่
generation สตริง ไม่
metageneration สตริง ไม่
fullPath สตริง ไม่
name สตริง ไม่
size Int64 ไม่
timeCreated วันที่ ไม่
updated วันที่ ไม่
md5Hash สตริง ใช่
cacheControl สตริง ใช่
contentDisposition สตริง ใช่
contentEncoding สตริง ใช่
contentLanguage สตริง ใช่
contentType สตริง ใช่
customMetadata [สตริง: สตริง] ใช่

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