استخدام البيانات الوصفية للملفات مع Cloud Storage على Android

بعد تحميل ملف إلى مرجع Cloud Storage، يمكنك أيضًا الحصول على وتعديل البيانات الوصفية للملف، مثلاً للاطّلاع على نوع المحتوى أو تعديله يمكن لتطبيق Files أيضًا تخزين أزواج مفاتيح/قيم مخصّصة مع بيانات وصفية إضافية للملفات.

الحصول على البيانات الوصفية للملف

تحتوي البيانات الوصفية للملفات على سمات شائعة، مثل name وsize contentType (ويُشار إليه غالبًا باسم نوع MIME) بالإضافة إلى بعض الشائعة مثل contentDisposition وtimeCreated. يمكن أن تكون بيانات التعريف هذه تم استرجاعها من مرجع Cloud Storage باستخدام طريقة getMetadata().

Kotlin+KTX

// Create a storage reference from our app
val storageRef = storage.reference

// Get reference to the file
val forestRef = storageRef.child("images/forest.jpg")
forestRef.metadata.addOnSuccessListener { metadata ->
    // Metadata now contains the metadata for 'images/forest.jpg'
}.addOnFailureListener {
    // Uh-oh, an error occurred!
}

Java

// Create a storage reference from our app
StorageReference storageRef = storage.getReference();

// Get reference to the file
StorageReference forestRef = storageRef.child("images/forest.jpg");
forestRef.getMetadata().addOnSuccessListener(new OnSuccessListener<StorageMetadata>() {
    @Override
    public void onSuccess(StorageMetadata storageMetadata) {
        // Metadata now contains the metadata for 'images/forest.jpg'
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        // Uh-oh, an error occurred!
    }
});

تعديل البيانات الوصفية للملف

يمكنك تعديل البيانات الوصفية للملف في أي وقت بعد اكتمال تحميل الملف من خلال باستخدام الطريقة updateMetadata(). ارجع إلى قائمة كاملة للاطّلاع على مزيد من المعلومات عن المواقع الإلكترونية يمكن تحديثه. ويتم فقط تحديث الخصائص المحددة في البيانات الوصفية، ويتم ترك جميع الآخرين بدون تعديل.

Kotlin+KTX

// Create a storage reference from our app
val storageRef = storage.reference

// Get reference to the file
val forestRef = storageRef.child("images/forest.jpg")
// Create file metadata including the content type
val metadata = storageMetadata {
    contentType = "image/jpg"
    setCustomMetadata("myCustomProperty", "myValue")
}

// Update metadata properties
forestRef.updateMetadata(metadata).addOnSuccessListener { updatedMetadata ->
    // Updated metadata is in updatedMetadata
}.addOnFailureListener {
    // Uh-oh, an error occurred!
}

Java

// Create a storage reference from our app
StorageReference storageRef = storage.getReference();

// Get reference to the file
StorageReference forestRef = storageRef.child("images/forest.jpg");
// Create file metadata including the content type
StorageMetadata metadata = new StorageMetadata.Builder()
        .setContentType("image/jpg")
        .setCustomMetadata("myCustomProperty", "myValue")
        .build();

// Update metadata properties
forestRef.updateMetadata(metadata)
        .addOnSuccessListener(new OnSuccessListener<StorageMetadata>() {
            @Override
            public void onSuccess(StorageMetadata storageMetadata) {
                // Updated metadata is in storageMetadata
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {
                // Uh-oh, an error occurred!
            }
        });

يمكنك حذف سمات البيانات الوصفية القابلة للكتابة من خلال ضبط null على:

Kotlin+KTX

// Create file metadata with property to delete
val metadata = storageMetadata {
    contentType = null
}

// Delete the metadata property
forestRef.updateMetadata(metadata).addOnSuccessListener { updatedMetadata ->
    // updatedMetadata.contentType should be null
}.addOnFailureListener {
    // Uh-oh, an error occurred!
}

Java

// Create file metadata with property to delete
StorageMetadata metadata = new StorageMetadata.Builder()
        .setContentType(null)
        .build();

// Delete the metadata property
forestRef.updateMetadata(metadata)
        .addOnSuccessListener(new OnSuccessListener<StorageMetadata>() {
            @Override
            public void onSuccess(StorageMetadata storageMetadata) {
                // metadata.contentType should be null
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {
                // Uh-oh, an error occurred!
            }
        });

التعامل مع الأخطاء

هناك عدد من الأسباب التي قد تؤدي إلى حدوث أخطاء في الحصول على البيانات الوصفية، بما في ذلك الملف غير متوفّر أو أنّ المستخدم لا يملك الإذن اللازم للوصول إلى الملف المطلوب. يمكن العثور على مزيد من المعلومات حول الأخطاء في التعامل مع الأخطاء قسم المستندات.

البيانات الوصفية المخصّصة

يمكنك تحديد البيانات الوصفية المخصّصة باستخدام طريقة setCustomMetadata() في صف واحد (StorageMetadata.Builder).

Kotlin+KTX

val metadata = storageMetadata {
    setCustomMetadata("location", "Yosemite, CA, USA")
    setCustomMetadata("activity", "Hiking")
}

Java

StorageMetadata metadata = new StorageMetadata.Builder()
        .setCustomMetadata("location", "Yosemite, CA, USA")
        .setCustomMetadata("activity", "Hiking")
        .build();

يمكنك تخزين بيانات خاصة بالتطبيق لكل ملف في البيانات الوصفية المخصصة، ولكننا نريد أوصي باستخدام قاعدة بيانات (مثل Firebase Realtime Database) لتخزين هذا النوع من البيانات ومزامنته.

خصائص البيانات الوصفية للملفات

تتوفر قائمة كاملة بسمات البيانات الوصفية في ملف أدناه:

حامل العقارات النوع أداة Setter موجودة
getBucket String لا
getGeneration String لا
getMetadataGeneration String لا
getPath String لا
getName String لا
getSizeBytes long لا
getCreationTimeMillis long لا
getUpdatedTimeMillis long لا
getMd5Hash String لا
getCacheControl String نعم
getContentDisposition String نعم
getContentEncoding String نعم
getContentLanguage String نعم
getContentType String نعم
getCustomMetadata String نعم
getCustomMetadataKeys Set<String> لا

إن تحميل الملفات وتنزيلها وتحديثها أمر مهم، وكذلك القدرة على لإزالتها. لنتعلم كيفية حذف الملفات ابتداءً من Cloud Storage