You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 11:33:09