如何在Flutter中向Digital Ocean Spaces上传文件时获取进度信息
获取DigitalOcean Spaces文件上传进度的解决方案
首先得明确:DigitalOcean Spaces确实不支持S3兼容的Bucket Notification功能,所以你之前尝试的桶事件监听器不会触发,这是服务端层面的限制,没法绕过。
不过你可以在客户端侧监听上传进度,minio Dart包本身就提供了对应的回调参数,不需要依赖服务端通知。具体来说,你可以在调用putObject(或其他上传方法)时,传入onProgress回调来实时获取上传进度。
示例代码
import 'dart:io'; import 'package:minio/minio.dart'; import 'package:get/get.dart'; Future<void> uploadFileWithProgress(String bucket, String objectName, File file) async { final minio = Minio( endPoint: 'your-spaces-endpoint', // 例如 nyc3.digitaloceanspaces.com accessKey: 'your-access-key', secretKey: 'your-secret-key', useSSL: true, ); final fileSize = await file.length(); final fileStream = file.openRead(); await minio.putObject( bucket, objectName, fileStream, fileSize, onProgress: (bytesSent, totalBytes) { // 计算进度比例 final progress = bytesSent / totalBytes; print('当前上传进度:${(progress * 100).toStringAsFixed(2)}%'); // 更新你的GetX状态控制器 Get.find<EntriesController>(tag: "newEntry").videoUploadProgress[0] = progress; }, ); }
关键说明
- 这个回调是在客户端上传过程中实时触发的,每上传一段数据就会调用一次,完全不依赖DigitalOcean的服务端功能,所以在Spaces上可以正常工作。
- 确保你使用的minio包版本支持
onProgress参数(目前最新版本是支持的,若用旧版建议升级)。 - 如果是大文件分片上传,对应的分片上传方法也提供了类似的进度回调参数,可以按需使用。
这样就能实时获取上传进度,更新你的UI或状态管理了。
内容的提问来源于stack exchange,提问作者Vueer
相关产品推荐
相关产品推荐

