flutter - 当应用程序在颤动或断开互联网连接并重新连接时从头开始上传文件
问题描述
我正在使用flutter中的workmanager在后台将文件上传到firebase云存储,当应用程序在后台时效果很好,但是当应用程序被用户杀死时,上传过程从头开始,以及当用户断开互联网并重新连接它开始上传过程从开始。
这是我的上传功能
Future<void> uploadVideo() async {
List<String> filesPath = [];
await Future.forEach(imgSource, (AssetEntity element) async {
File file = await element.file;
filesPath.add(file.path);
});
await Workmanager().registerOneOffTask(
"1",
uploadFileTask,
inputData: <String, dynamic>{
'filesPath': filesPath,
},
constraints: Constraints(
networkType: NetworkType.connected,
requiresBatteryNotLow: true,
),
backoffPolicy: BackoffPolicy.exponential,
existingWorkPolicy: ExistingWorkPolicy.keep,
);
}
// Here is callbackDispatcher function
void callbackDispatcher() {
Workmanager().executeTask((task, inputData) async {
switch (task) {
case uploadFileTask:
try {
List<dynamic> dynamicType = inputData["filesPath"];
List<String> filesPath =
dynamicType.map((e) => e.toString()).toList();
await Firebase.initializeApp();
int counter = 1;
List<String> downloadUrlLinks = [];
await Future.forEach(filesPath, (String filePath) async {
File file = File(filePath);
String fullPath = getRandomName(file.path);
String storagePath = "test/$fullPath";
print("Full path HM" + fullPath);
String downloadUrl = await CloudService.uploadFileWithProgressBar(
file: file,
filePath: storagePath,
maxLength: filesPath.length,
uploadedLength: counter,
);
downloadUrlLinks.add(downloadUrl);
counter++;
});
await NotificationService.finishedNotification(
title: 'Uploading files finished');
print("download link: " + downloadUrlLinks.toString());
downloadUrlLinks = [];
} catch (e) {
print("uploading error" + e.toString());
}
break;
}
return Future.value(true);
});
}
解决方案
推荐阅读
- c# - 即使不使用 xml 文件,根级别的数据也是无效的
- php - How to convert curl "-b" tag into php curl?
- android - 如何确定在 Android 上通过 TLS/TCP OutputStream 发送了多少数据?
- python - How to search human names in a dataframe?
- sql - 使用 WITH 子句和 COUNT 子查询进行查询
- openldap - Migrate data from one openldap to another one
- python - 如何使用 OpenCV-Python 检测照片上的黑色轮廓
- c# - 将字符串转换为浮点数对于某些数字但不是其他数字失败
- database - 服务器端预取数据库数据是否存在任何安全风险?
- sql - 如何在 SQLite 中将两列组合在一起?