我在使用 Firebase Storage Kotlin SDK 時遇到了一個奇怪的錯誤。我正在使用一個putFile()函式將影像上傳到 Firebase。一切似乎都很好,我能夠做到這一點。但是,當我嘗試測驗和禁用 Internet 連接時,該函式不會回傳任何內容。我的意思是我已經放置了所有UploadTask的監聽器,但是沒有一個被呼叫。它只是保持“加載”。有沒有人遇到過類似的問題?
val storage = FirebaseStorage.getInstance().reference
val remoteImagePath = "images/username/imageName.jpg"
val imageRef = storage.child(remoteImagePath)
val result = imageRef.putFile(image)
result.addOnSuccessListener {
Log.d("ViewModel", "Success!")
}.addOnFailureListener { error ->
Log.d("ViewModel", "${error.message}")
}.addOnCompleteListener{
Log.d("ViewModel", "Completed!")
}
uj5u.com熱心網友回復:
但是,當我嘗試測驗和禁用 Internet 連接時,該函式不會回傳任何內容。
這是預期的行為,因為您禁用了設備上的互聯網連接。如果設備未連接到互聯網,則無法將影像上傳到云存盤。
但是,適用于 Cloud Storage 的 Firebase SDK支持恢復上傳。這意味著一旦您開始在線上傳檔案,您可以稍后繼續上傳。因此,為了能夠恢復特定檔案的上傳操作,您必須至少在上傳開始之前在線,并且您可以呼叫UploadTask.TaskSnapshot#getUploadSessionUri()來獲取“uploadSessionUri”的值。此 URI 的有效期約為一周,可用于稍后通過將值傳遞給StorageReference#putFile(Uri, StorageMetadata, Uri)方法來恢復上傳。沒有它,您將無法恢復任何上傳。如果您需要該 URI 物件在應用程式重新啟動時保持不變,那么您可以將該物件保存在持久存盤中,例如SharedPreferences,甚至在Data Store中更好。
因此,如果您處于離線狀態并且您沒有設法獲取會話 URI,那么您將無法恢復上傳。沒有自動重試機制。
我的意思是我已經放置了所有 UploadTask 偵聽器,但沒有一個被呼叫。
正如您已經注意到的, StorageReference#putFile(uri: Uri)方法回傳的物件型別是UploadTask。因此,您可以附加一個偵聽器以查看操作何時完成或因例外而失敗。在大多數情況下,當存盤服務器由于不正確的安全規則而拒絕操作時,會呼叫 onFailure。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/531022.html
標籤:Google Cloud Collective 安卓火力基地科特林谷歌云平台firebase-存储
