Używaj metadanych plików w Cloud Storage na Androidzie

Po przesłaniu pliku do pliku referencyjnego Cloud Storage możesz także pobrać i zaktualizować metadane pliku, na przykład w celu wyświetlenia lub zaktualizowania typu zawartości. Pliki mogą również przechowywać niestandardowe pary klucz/wartość z dodatkowymi metadanymi pliku.

Pobierz metadane pliku

Metadane pliku zawierają typowe właściwości, takie jak name , size i contentType (często określane jako typ MIME), oprócz niektórych mniej powszechnych właściwości, takich jak contentDisposition i timeCreated . Te metadane można pobrać z odwołania do Cloud Storage za pomocą metody 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!
    }
});

Zaktualizuj metadane pliku

Metadane pliku można zaktualizować w dowolnym momencie po zakończeniu przesyłania pliku za pomocą metody updateMetadata() . Zapoznaj się z pełną listą, aby uzyskać więcej informacji na temat właściwości, które można zaktualizować. Aktualizowane są tylko właściwości określone w metadanych, wszystkie inne pozostają niezmienione.

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

Możesz usunąć zapisywalne właściwości metadanych, przekazując 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!
            }
        });

Obsługa błędów

Istnieje wiele powodów, dla których mogą wystąpić błędy podczas pobierania lub aktualizowania metadanych, w tym plik nie istnieje lub użytkownik nie ma uprawnień dostępu do żądanego pliku. Więcej informacji na temat błędów można znaleźć w sekcji Obsługa błędów w dokumentacji.

Niestandardowe metadane

Niestandardowe metadane można określić za pomocą metody setCustomMetadata() w klasie 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();

Możesz przechowywać dane aplikacji dla każdego pliku w niestandardowych metadanych, ale zdecydowanie zalecamy korzystanie z bazy danych (takiej jak Baza danych czasu rzeczywistego Firebase ) do przechowywania i synchronizowania tego typu danych.

Właściwości metadanych pliku

Pełna lista właściwości metadanych w pliku jest dostępna poniżej:

Pobieracz właściwości Typ Seter istnieje
getBucket String NIE
getGeneration String NIE
getMetadataGeneration String NIE
getPath String NIE
getName String NIE
getSizeBytes long NIE
getCreationTimeMillis long NIE
getUpdatedTimeMillis long NIE
getMd5Hash String NIE
getCacheControl String TAK
getContentDisposition String TAK
getContentEncoding String TAK
getContentLanguage String TAK
getContentType String TAK
getCustomMetadata String TAK
getCustomMetadataKeys Set<String> NIE

Przesyłanie, pobieranie i aktualizowanie plików jest ważne, ale równie ważna jest możliwość ich usuwania. Nauczmy się, jak usuwać pliki z Cloud Storage.