Dateimetadaten mit Cloud Storage unter Android verwenden

Nachdem Sie eine Datei in Cloud Storage hochgeladen haben, können Sie auch die Dateimetadaten abrufen und aktualisieren, z. B. um den Inhaltstyp anzusehen oder zu aktualisieren. In Dateien können auch benutzerdefinierte Schlüssel/Wert-Paare mit zusätzlichen Dateimetadaten gespeichert werden.

Dateimetadaten abrufen

Dateimetadaten enthalten allgemeine Attribute wie name, size und contentType (oft als MIME-Typ bezeichnet) sowie einige weniger häufige Attribute wie contentDisposition und timeCreated. Diese Metadaten können mit der Methode getMetadata() aus einer Cloud Storage-Referenz abgerufen werden.

Kotlin

// 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!
    }
});

Dateimetadaten aktualisieren

Sie können die Metadaten einer Datei jederzeit nach Abschluss des Dateiuploads mit der Methode updateMetadata() aktualisieren. Hier finden Sie eine vollständige Liste der Attribute, die aktualisiert werden können. Es werden nur die in den Metadaten angegebenen Attribute aktualisiert. Alle anderen bleiben unverändert.

Kotlin

// 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!
            }
        });

Sie können beschreibbare Metadateneigenschaften löschen, indem Sie null übergeben:

Kotlin

// 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!
            }
        });

Fehler beheben

Es gibt eine Reihe von Gründen, warum beim Abrufen oder Aktualisieren von Metadaten Fehler auftreten können. Dazu gehören, dass die Datei nicht vorhanden ist oder der Nutzer keine Berechtigung hat, auf die gewünschte Datei zuzugreifen. Weitere Informationen zu Fehlern finden Sie in der Dokumentation im Abschnitt Fehlerbehandlung.

Benutzerdefinierte Metadaten

Sie können benutzerdefinierte Metadaten mit der Methode setCustomMetadata() in der Klasse StorageMetadata.Builder angeben.

Kotlin

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();

Sie können app-spezifische Daten für jede Datei in benutzerdefinierten Metadaten speichern. Wir empfehlen jedoch dringend, eine Datenbank (z. B. Firebase Realtime Database) zum Speichern und Synchronisieren dieser Art von Daten zu verwenden.

Eigenschaften von Dateimetadaten

Eine vollständige Liste der Metadatenattribute für eine Datei finden Sie unten:

Property Getter Typ Setter vorhanden
getBucket String NEIN
getGeneration String NEIN
getMetadataGeneration String NEIN
getPath String NEIN
getName String NEIN
getSizeBytes long NEIN
getCreationTimeMillis long NEIN
getUpdatedTimeMillis long NEIN
getMd5Hash String NEIN
getCacheControl String YES
getContentDisposition String YES
getContentEncoding String YES
getContentLanguage String YES
getContentType String YES
getCustomMetadata String YES
getCustomMetadataKeys Set<String> NEIN

Das Hochladen, Herunterladen und Aktualisieren von Dateien ist wichtig, aber auch das Entfernen von Dateien. Hier erfahren Sie, wie Sie Dateien aus Cloud Storage löschen.