📅  最后修改于: 2021-01-02 03:47:42             🧑  作者: Mango
在上一节中,我们了解了上传文件的不同方法。现在,我们将学习如何从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,则可以通过在存储上下文上调用getDownloadUrl()方法来获取文件的下载URL。
storageRef.child("users/me/profile.png").downloadUrl.addOnSuccessListener {
// Getting the download URL for 'users/me/profile.png'
}.addOnFailureListener {
// Handling any errors
}
用于消除样板代码并推广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)