七牛云C# SDK v7.2.15 文件分片上传,怎么获取上传进度

新手上路,请多包涵

问题描述

七牛云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);//
               

想知道如何获取上传进度

阅读 2.1k
1 个回答
新手上路,请多包涵

C# sdk 实际是无法获取上传进度的,

当前可以获取实际上传进度的是 js - sdk, 如果需要获取进度,

需要自行修改SDK才可以的,在每次分片上传后,计算当前上传量/文件总量

这个改起来会比较麻烦

logo
七牛云问答
子站问答
访问
宣传栏