android - UploadTask(Google Play 服务)在进程重启时继续上传
问题描述
我使用 UploadTask 将文件上传到 Firebase 存储,重新启动该过程后如何继续上传文件?每次我尝试上传未完全上传的文件时,上传都会从头开始。
private fun uploadFromUri(fileUri: Uri) {
val fileFromUri = Uri.fromFile(File(Utils.getPath(this, fileUri)))
val photoRef = storageRef.child("files")
.child(fileFromUri.lastPathSegment ?: "_file_")
val metadata = StorageMetadata.Builder()
.setCustomMetadata("fileName", fileFromUri.lastPathSegment)
.build()
photoRef.putFile(fileUri, metadata).addOnProgressListener { taskSnapshot ->
showProgressNotification(
getString(R.string.progress_uploading),
taskSnapshot.bytesTransferred,
taskSnapshot.totalByteCount
)
}.continueWithTask { task ->
if (!task.isSuccessful) {
throw task.exception!!
}
photoRef.downloadUrl
}.addOnSuccessListener { downloadUri ->
broadcastUploadFinished(downloadUri, fileUri)
showUploadFinishedNotification(downloadUri, fileUri)
}.addOnFailureListener { exception ->
broadcastUploadFinished(null, fileUri)
showUploadFinishedNotification(null, fileUri)
}
}
解决方案
如果该过程在之前的上传过程中终止,则无法继续上传。Cloud Storage SDK 根本不这样做。相反,您应该使用某种机制来使进程更有可能在完成上传所需的时间内保持活动状态,例如前台服务。
推荐阅读
- d3.js - D3折线和文本重叠
- jquery - 我如何根据我在 Jquery Autocomplete 中选择的选项获取值(ID)
- vba - 如何使 vba PowerPoint 的自动运行工作?
- r - 带有 `dbplyr` 和 `RPostgres` 的 unnest json 列
- java - 使用 Apache Beam 将 SAP HANA 连接到 Big Query
- c++ - C ++中的指针输出问题
- sql - 如何使用 case 语句在 PIVOT 中获取多个列
- ansible - Ansible:你可以在另一个变量中迭代一个变量吗?
- angular - ngif 哪个函数导致 ExpressionChangedAfterItHasBeenCheckedError
- java - 在没有管理员权限的情况下将文件复制到 Windows 中的 C:/Program Files