问题描述
七牛云C# SDK v7.2.15 文件分片上传,怎么获取上传进度
问题出现的环境背景及自己尝试过哪些方法
相关代码
string AccessKey = Applicate.URLDATA.data.sevenOxenAccessKey;
string SecretKey = Applicate.URLDATA.data.sevenOxenSecretKey;
string bucket = Applicate.URLDATA.data.sevenOxenSpace;
string saveKey = saveName;
string localFile = filePath;
// 这个示例单独使用了一个Settings类,其中包含AccessKey和SecretKey
// 实际应用中,请自行设置您的AccessKey和SecretKey
Qiniu.Util.Mac mac = new Qiniu.Util.Mac(AccessKey, SecretKey);
// 断点记录文件,可以不用设置,让SDK自动生成,如果出现续上传的情况,SDK会尝试从该文件载入断点记录
// 对于不同的上传任务,请使用不同的recordFile
string recordFile = localFile.Substring(0, localFile.LastIndexOf('\\')) + "\\" + Convert.ToInt64((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalMilliseconds).ToString() + ".process";
PutPolicy putPolicy = new PutPolicy();
putPolicy.Scope = bucket;
putPolicy.SetExpires(3600);
putPolicy.DeleteAfterDays = 10;
#region 设置服务器区域机房
//第一种方式: 指定具体的要上传的zone
//注:该具体指定的方式和以下自动识别的方式选择其一即可
//要上传的空间(bucket)的存储区域为华东时
// Zone z = Zone.zone0();
//要上传的空间(bucket)的存储区域为华北时
// Zone z = Zone.zone1();
//要上传的空间(bucket)的存储区域为华南时
// Zone z = Zone.zone2();
//1.直接配置( 如果确定机房所在Zone,可以使用此方法)
// ZoneID zoneId = ZoneID.CN_East;
// [CN_East:华东] [CN_South:华南] [CN_North:华北] [US_North:北美]
// USE_HTTPS = (true|false) 是否使用HTTPS
//Qiniu.Common.Config.SetZone(zoneId, USE_HTTPS);
//2.使用AutoZone自动配置(推荐使用这个方法)
// AK = ACCESS_KEY
// USE_HTTPS = (true|false) 是否使用HTTPS
// 使用前请确保AK和BUCKET正确,否则此函数会抛出异常(比如code612/631等错误)
Qiniu.Common.Config.AutoZone(AccessKey, bucket, false);
#endregion
// 包含两个参数,并且都有默认值
// 参数1(bool): uploadFromCDN是否从CDN加速上传,默认否
// 参数2(enum): chunkUnit上传分片大小,可选值128KB,256KB,512KB,1024KB,2048KB,4096KB
ResumableUploader ru = new ResumableUploader(false, ChunkUnit.U128K);
// ResumableUploader.UploadFile有多种形式,您可以根据需要来选择
//
// 最简模式,使用默认recordFile和默认uploadProgressHandler
// UploadFile(localFile,saveKey,token)
//
// 基本模式,使用默认uploadProgressHandler
// UploadFile(localFile,saveKey,token,recordFile)
//
// 一般模式,使用自定义进度处理(可以监视上传进度)
// UploadFile(localFile,saveKey,token,recordFile,uploadProgressHandler)
//
// 高级模式,包含上传控制(可控制暂停/继续 或者强制终止)
// UploadFile(localFile,saveKey,token,recordFile,uploadProgressHandler,uploadController)
//
// 支持自定义参数
//var extra = new System.Collections.Generic.Dictionary<string, string>();
//extra.Add("FileType", "UploadFromLocal");
//extra.Add("YourKey", "YourValue");
//uploadFile(...,extra,...)
//最大尝试次数(有效值1~20),在上传过程中(如mkblk或者bput操作)如果发生错误,它将自动重试,如果没有错误则无需重试
int maxTry = 3;
// 使用默认进度处理,使用自定义上传控制
UploadProgressHandler upph = new UploadProgressHandler(ResumableUploader.DefaultUploadProgressHandler);
//UploadController upctl = new UploadController(DefaultUploadController);
string token = Qiniu.Util.Auth.CreateUploadToken(mac, putPolicy.ToJsonString());
Qiniu.Http.HttpResult result = ru.UploadFile(localFile, saveKey, token, recordFile, maxTry);//
想知道如何获取上传进度
C# sdk 实际是无法获取上传进度的,
当前可以获取实际上传进度的是 js - sdk, 如果需要获取进度,
需要自行修改SDK才可以的,在每次分片上传后,计算当前上传量/文件总量
这个改起来会比较麻烦