📜  Firebase从云存储下载文件

📅  最后修改于: 2021-01-02 03:47:42             🧑  作者: Mango

从Cloud Storage下载文件

在上一节中,我们了解了上传文件的不同方法。现在,我们将学习如何从Cloud Storage下载文件。为了下载文件,首先,我们必须创建要存储的文件的Cloud Storage引用。

我们可以通过以下两种方式创建引用,即,将子路径附加到存储根,并从现有gs://https:// URL引用云存储中的对象。

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

// Creating a reference with an initial file path and name
val pathReference = storageRef.child("images/stars.jpg")

// Creating a reference to a file from a Google Cloud Storage URI
val gsReference = storage.getReferenceFromUrl("gs://bucket/images/stars.jpg")

// Creating a reference from an HTTPS URL
// In the URL, characters are URL escaped!
val httpsReference = storage.getReferenceFromUrl(
        "https://firebasestorage.googleapis.com/b/bucket/o/images%20stars.jpg")

下载方式

创建适当的引用之后,我们调用各种方法来下载文件,即getBytes(),getStream(),或者我们可以使用getDownloadUrl()获取下载URL,以便通过另一个库下载文件。

使用getBytes()方法是将文件下载到内存的最简单方法。如果我们请求的文件大于应用程序的可用内存,则我们的应用程序将崩溃。 getBytes()需要最多下载字节。我们根据应用程序功能设置最大大小。

var jtpRef = storageRef.child("images/jtp.jpg")

val ONE_MEGABYTE: Long = 1024 * 1024
islandRef.getBytes(ONE_MEGABYTE).addOnSuccessListener {
    // Data for "images/jtp.jpg" is returned, use this as needed
}.addOnFailureListener {
    // Handling any errors
}

将数据下载到本地文件

如果要在脱机时访问文件或共享文件,则可以使用getFile()方法。此方法将文件直接下载到本地设备。该方法返回一个DownloadTask ,我们可以使用它来管理下载并监视状态。

jtpRef = storageRef.child("images/jtp.jpg")

val localFile = File.createTempFile("images", "jpg")

jtpRef.getFile(localFile).addOnSuccessListener {
    // Local temp file has been created
}.addOnFailureListener {
    // Handling any errors
}

通过URL下载数据

如果我们已经具有基于URL的下载基础结构,或者只是想共享一个URL,则可以通过在存储上下文上调用getDownloadUrl()方法来获取文件的下载URL。

storageRef.child("users/me/profile.png").downloadUrl.addOnSuccessListener {
    // Getting the download URL for 'users/me/profile.png'
}.addOnFailureListener {
    // Handling any errors
}

使用FirebaseUI下载图像

用于消除样板代码并推广Google最佳做法。 FirebaseUI提供简单,自定义和可用于生产的本机移动绑定。使用FirebaseUI,我们可以通过与Glide的集成来快速,轻松地从云存储中下载,缓存和显示图像。

首先,将FirebaseUI添加到我们的app / build.gradle中

dependencies {
    // FirebaseUI Storage only
    implementation 'com.firebaseui:firebase-ui-storage:4.3.1'
}

然后我们可以将图像直接从存储加载到ImageView中

// Referencing to an image file in Cloud Storage
val storageReference = FirebaseStorage.getInstance().reference

// ImageView in our Activity
val imageView = findViewById(R.id.imageView)

// Downloading directly from StorageReference using Glide
Glide.with(this /* context */)
        .load(storageReference)
        .into(imageView)