如何使用Mega API的UploadFileAsync?C#上传进度与参数咨询
解决MegaApiClient上传进度条不显示的问题(附UploadFileAsync参数详解)
我来帮你拆解这个UploadFileAsync方法的参数,顺便解决进度条不显示的问题——毕竟我之前用Mega API做上传功能时也踩过一模一样的坑😉
先搞懂UploadFileAsync的每个参数
你看到的方法完整定义应该是这样的:
Task<INode> UploadFileAsync( string filename, INode parentNode, IProgress<TransferProgress> progress, CancellationToken? cancellationToken = null );
逐个解释每个参数的作用:
string filename:本地待上传文件的完整路径(比如D:\Backup\photo.jpg),这个你应该已经用对了,毕竟上传成功了。INode parentNode:Mega账户里的目标父文件夹节点。如果传null,文件会直接传到Mega的根目录;如果要传到指定文件夹,需要先通过GetNodesAsync()之类的方法获取到对应文件夹的INode实例。IProgress<TransferProgress> progress:这是实现进度条的核心!你之前看不到进度,大概率是这里传了null,或者没正确实现回调逻辑。Mega API会在上传过程中不断调用这个对象的Report方法,把当前上传进度传回来。CancellationToken? cancellationToken:可选参数,用来取消上传任务(比如用户点击“取消”按钮时触发)。不需要取消功能的话,直接传CancellationToken.None或者null就行。
实现进度条的具体步骤
以WinForms为例(WPF/控制台的逻辑类似,只是UI更新方式不同):
- 准备UI控件:在你的窗体上拖一个
ProgressBar(命名为uploadProgressBar)和一个Label(命名为progressLabel,用来显示百分比和字节数)。 - 创建进度回调实例:
// 实例化Progress<T>,传入回调方法处理进度更新 var uploadProgress = new Progress<TransferProgress>(progressUpdate => { // 注意:Mega的回调是在后台线程执行的,必须切换回UI线程更新控件 this.Invoke((Action)(() => { // TransferProgress的关键属性: // - Progress: 0~1之间的浮点数(0=0%,1=100%) // - BytesTransferred: 已上传的字节数 // - TotalBytes: 文件总字节数 int percentage = (int)(progressUpdate.Progress * 100); uploadProgressBar.Value = percentage; // 转换成MB显示更直观 double uploadedMB = progressUpdate.BytesTransferred / 1024.0 / 1024.0; double totalMB = progressUpdate.TotalBytes / 1024.0 / 1024.0; progressLabel.Text = $"上传进度:{percentage}% ({uploadedMB:F2}MB/{totalMB:F2}MB)"; })); });
- 调用UploadFileAsync时传入进度对象:
// 假设你已经初始化了MegaApiClient并登录成功 // 这里以上传到根目录为例,parentNode传null var uploadedFileNode = await megaApiClient.UploadFileAsync( @"D:\MyFiles\large_file.zip", null, uploadProgress, CancellationToken.None );
常见坑点提醒
- 必须切换回UI线程更新控件:如果直接在回调里更新UI,会抛出跨线程操作异常,一定要用
Invoke(WinForms)或Dispatcher.Invoke(WPF)。 - 不要传null给progress参数:传null的话,Mega API不会触发任何进度回调,自然看不到进度条变化。
- 注意Progress属性的范围:它是0到1的浮点数,转换成百分比要乘以100,ProgressBar的Maximum默认是100,不用额外修改。
内容的提问来源于stack exchange,提问作者Eng.Mohamed Bassuny
相关产品推荐
相关产品推荐

