/// <summary> /// 删除云端图片 /// </summary> /// <param name="filename">文件名称</param> /// <returns></returns> public static CloudFile Delete(string filename) { var model = new CloudFile(); try { Mac mac = new Mac(Ak, Sk); // 设置存储区域 Config.SetZone(ZoneID.CN_North, false); BucketManager bucketManager = new BucketManager(mac); // 文件名 filename = filename.Replace(domain, ""); HttpResult deleteRet = bucketManager.Delete(Bucket, filename); model.Code = deleteRet.Code; if (model.Code != 200) { model.Message = deleteRet.Text; } } catch (Exception ex) { model.Code = 500; model.Message = ex.Message; } return(model); }
/// <summary> /// 删除七牛的文件 /// </summary> /// <param name="key"></param> public void Delete(string key) { var mac = new Mac(this.AK, this.SK); var bm = new BucketManager(mac); // 返回结果存储在result中 var res = bm.Delete(this.Bucket, key).ThrowIfException(); }
public void DeleteFile(string fileName, string accessKey, string secretKey, string bucket) { Mac mac = new Mac(accessKey, secretKey); BucketManager bm = new BucketManager(mac); bm.Delete(bucket, fileName); }
public string DeleteFile(string Name) { // 生成(上传)凭证时需要使用此Mac // 这个示例单独使用了一个Settings类,其中包含AccessKey和SecretKey // 实际应用中,请自行设置您的AccessKey和SecretKey Mac mac = new Mac(AppCode.AK, AppCode.SK); string bucket = "allfile"; string fileName = Name; string saveKey = fileName; PutPolicy putPolicy = new PutPolicy(); putPolicy.Scope = bucket + ":" + saveKey; putPolicy.SetExpires(3600); string jstr = putPolicy.ToJsonString(); string token = Auth.CreateUploadToken(mac, jstr); //先删除 BucketManager bm = new BucketManager(mac); HttpResult result = bm.Delete(bucket, saveKey); string res = result.ToString(); if (res.Substring(0, 8) == "code:200") { return(""); } else { return(res); } }
public bool CheckInfo(string AK, string SK, string BucketName) { string TestFileName = "QiniuUploaderTestFile"; string TestFilePath = System.Environment.CurrentDirectory + "\\" + TestFileName; string TestFileContent = "Test"; File.WriteAllText(TestFilePath, TestFileContent); Mac mac = new Mac(AK, SK); PutPolicy putPolicy = new PutPolicy { Scope = BucketName }; string token = Auth.CreateUploadToken(mac, putPolicy.ToJsonString()); Config config = new Config { // 设置上传区域 //Zone = Zone.ZONE_CN_East, // 设置 http 或者 https 上传 UseHttps = true, UseCdnDomains = true, ChunkSize = ChunkUnit.U512K }; FormUploader target = new FormUploader(config); HttpResult result = target.UploadFile(TestFilePath, TestFileName, token, null); if (File.Exists(TestFilePath)) { File.Delete(TestFilePath); } switch (result.RefCode) { case 200: { //delete temp file BucketManager bm = new BucketManager(mac, config); HttpResult deleteRet = bm.Delete(BucketName, TestFileName); MessageBox.Show("Information saved!", "Success:", MessageBoxButtons.OK, MessageBoxIcon.Information); return(true); } case 631: { MessageBox.Show("No such Bucket!", "ERROR:", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } case 401: { MessageBox.Show("AK or SK is incorrect!", "ERROR:", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } } MessageBox.Show(result.RefText, "ERROR:", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); }
/// <summary> /// 删除七牛的文件 /// </summary> /// <param name="key"></param> public static void Delete(string key) { var mac = new Mac(AK, SK); var bm = new BucketManager(mac); // 返回结果存储在result中 var res = bm.Delete(bucket, key); res.ThrowIfException(); }
public static async Task <bool> DeleteFile(string bucketName, string fileId) { #if MOCK return(await Task.FromResult(true)); #else var bucketManager = new BucketManager(_currentMac, _config); var queryResult = await Task.Factory.StartNew(() => bucketManager.Delete(bucketName, fileId)); return(queryResult.Code == 200); #endif }
/// <summary> /// 上传版本 /// </summary> private string UploadVersion() { int dbversion = dal.ExecuteInt("Select VersionID From Version"); string serverVersion = getVersionName(); Mac mac = new Mac(AppCode.AK, AppCode.SK); string bucket = "mydb"; string saveKey = "version" + dbversion + ".txt"; string localFile = ServerPath + "\\" + "version" + dbversion + ".txt"; //Server.MapPath("version" + dbversion + ".txt"); try { if (!File.Exists(localFile)) { FileStream fs = new FileStream(localFile, FileMode.Create); fs.Close(); } } catch (Exception ep) { string sqlLog = "Insert into Logs(Name,CreateDate,Type,Content) values('更新版本号-创建version.txt','" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','版本控制','" + ep.Message.Filter() + "')"; dal.ExecuteNonQuery(sqlLog); } try { PutPolicy putPolicy = new PutPolicy(); putPolicy.Scope = bucket + ":" + saveKey; putPolicy.SetExpires(3600); string jstr = "{\"scope\":\"" + putPolicy.Scope + "\",\"deadline\":" + putPolicy.Deadline + "}"; //putPolicy.ToJsonString(); string token = Auth.CreateUploadToken(mac, jstr); UploadManager um = new UploadManager(); //先删除 BucketManager bm = new BucketManager(mac); bm.Delete(bucket, serverVersion); HttpResult result = um.UploadFile(localFile, saveKey, token); string res = result.ToString(); File.Delete(localFile); return("Finish"); } catch (Exception ep) { return(ep.Message); } }
public ResultInfo Delete(string key) { BucketManager bm = new BucketManager(mac); HttpResult result = bm.Delete(bucket, key); return(new ResultInfo { Code = result.Code == 200 ? 0 : result.Code, Msg = result.RefText, Data = result, }); }
public void DeleteTest() { Mac mac = new Mac(AccessKey, SecretKey); BucketManager target = new BucketManager(mac); HttpResult result = target.Delete(Bucket1, FileKey1); bool cond = (result.Code == (int)HttpCode.OK || result.Code == (int)HttpCode.BUCKET_NOT_EXIST || result.Code == (int)HttpCode.FILE_NOT_EXIST); Assert.IsTrue(cond); }
/// <summary> /// 删除空间中指定文件 /// </summary> public static void delete() { Mac mac = new Mac(Settings.AccessKey, Settings.SecretKey); string bucket = "test"; string key = "1.txt"; BucketManager bm = new BucketManager(mac); var result = bm.Delete(bucket, key); Console.WriteLine(result); }
/// <summary> /// 删除七牛文件 /// </summary> /// <param name="AccessKey">密钥AK</param> /// <param name="SecretKey">密钥SK</param> /// <param name="bucket">存储空间</param> /// <param name="fileKey">文件名</param> /// <param name="zone">Cdn区域 枚举 默认华东</param> /// <returns></returns> public static HttpResult DelFile(string AccessKey, string SecretKey, string bucket, string fileKey, Zone zone = null) { Mac mac = new Mac(AccessKey, SecretKey); Config config = new Config(); config.Zone = (zone == null ? Zone.ZONE_CN_East : zone); config.UseHttps = true; config.UseCdnDomains = true; config.ChunkSize = ChunkUnit.U512K; BucketManager black = new BucketManager(mac, config); return(black.Delete(bucket, fileKey)); }
public void DeleteFile(string key) { BucketManager bm = new BucketManager(mac); HttpResult result = bm.Delete(Bucket, key); if (result.Code != 200) { var jResult = JsonConvert.DeserializeObject <JObject>(result.Text); if (jResult.Properties().Any(s => s.Name == "error")) { throw new Exception(jResult["error"].Value <string>()); } } }
/// <summary> /// 删除文件 /// </summary> public HttpResult DelFile(string fileName) { // 空间名 string Bucket = SpaceName; // 文件名 string Key = fileName; Mac mac = new Mac(AccessKey, SecretKey); BucketManager bucketManager = new BucketManager(mac); HttpResult deleteRet = bucketManager.Delete(Bucket, Key); return(deleteRet); //if (deleteRet.Code != (int)HttpCode.OK) //{ // Console.WriteLine("delete error: " + deleteRet.ToString()); //} }
/// <summary> /// 删除 指定文件 /// </summary> /// <param name="fileUri"></param> /// <returns></returns> public static bool DeletePrivateFile(string bucket, string fileName) { Mac mac = new Mac(Settings.AccessKey, Settings.SecretKey); string key = fileName; BucketManager bm = new BucketManager(mac); Qiniu.Http.HttpResult delete = bm.Delete(bucket, fileName); if (delete.Code == (int)HttpCode.OK) { return(true); } else { return(false); } }
/// <summary> /// 上传库文件 /// </summary> /// <returns></returns> private string UploadFile() { try { // 生成(上传)凭证时需要使用此Mac // 这个示例单独使用了一个Settings类,其中包含AccessKey和SecretKey // 实际应用中,请自行设置您的AccessKey和SecretKey Mac mac = new Mac(AppCode.AK, AppCode.SK); string bucket = "mydb"; string saveKey = "Bowtech.db"; string localFile = MapPath; // Server.MapPath("Bowtech.db"); // 上传策略,参见 // https://developer.qiniu.com/kodo/manual/put-policy PutPolicy putPolicy = new PutPolicy(); // 如果需要设置为"覆盖"上传(如果云端已有同名文件则覆盖),请使用 SCOPE = "BUCKET:KEY" putPolicy.Scope = bucket + ":" + saveKey; //putPolicy.Scope = bucket; // 上传策略有效期(对应于生成的凭证的有效期) putPolicy.SetExpires(3600); // 上传到云端多少天后自动删除该文件,如果不设置(即保持默认默认)则不删除 // putPolicy.DeleteAfterDays = 1; string jstr = "{\"scope\":\"" + putPolicy.Scope + "\",\"deadline\":" + putPolicy.Deadline + "}"; //putPolicy.ToJsonString(); string token = Auth.CreateUploadToken(mac, jstr); UploadManager um = new UploadManager(); //先删除 BucketManager bm = new BucketManager(mac); bm.Delete(bucket, saveKey); HttpResult result = um.UploadFile(localFile, saveKey, token); string res = result.ToString(); if (res.Substring(0, 8) == "code:200") { return("上传完成"); } else { return("上传异常"); } } catch (Exception ep) { return(ep.Message); } }
public void DeleteTest() { Config config = new Config(); config.Zone = Zone.ZONE_CN_East; Mac mac = new Mac(AccessKey, SecretKey); BucketManager bucketManager = new BucketManager(mac, config); string newKey = "qiniu-to-delete.png"; bucketManager.Copy(Bucket, "qiniu.png", Bucket, newKey); HttpResult deleteRet = bucketManager.Delete(Bucket, newKey); if (deleteRet.Code != (int)HttpCode.OK) { Assert.Fail("delete error: " + deleteRet.ToString()); } }
public async Task DeleteTest() { var config = new Config { Zone = Zone.ZoneCnEast }; var mac = new Mac(AccessKey, SecretKey); var bucketManager = new BucketManager(mac, config); var newKey = "qiniu-to-delete.png"; await bucketManager.Copy(Bucket, "qiniu.png", Bucket, newKey); var deleteRet = await bucketManager.Delete(Bucket, newKey); if (deleteRet.Code != (int)HttpCode.OK) { Assert.True(false, "delete error: " + deleteRet); } }
/// <summary> /// 删除云端图片 /// </summary> /// <param name="filename">文件名称</param> /// <returns></returns> public HttpResult Delete(string filename) { Mac mac = new Mac(Ak, Sk); // 设置存储区域 Config.SetZone(ZoneID.CN_South, false); BucketManager bucketManager = new BucketManager(mac); // 文件名 filename = filename.Replace(domain, ""); HttpResult result = bucketManager.Delete(Bucket, filename); if (result.Code != 200) { throw new FriendlyException(result.Text); } return(result); }
static void Main(string[] args) { Auth auth = EnvUtility.EnvAuth(); Config config = EnvUtility.EnvConfig(); // 上传到这个 bucket string bucket = "umu618-docs"; string key = "U-1K.txt"; // 上传前先删除 BucketManager bm = new BucketManager(auth, config); HttpResult result = bm.Delete(bucket, key); Console.WriteLine("---Delete---\n{0}", result.ToString()); // 在内存构造一个文件内容:1024 个 U const long dataSize = 1024; byte[] data = new byte[dataSize]; for (int i = 0; i < dataSize; ++i) { data[i] = 85; } // 一个小时的超时,转为 UnixTime 毫秒数 long deadline = UnixTimestamp.GetUnixTimestamp(3600) * 1000; string putPolicy = "{\"scope\": \"" + bucket + "\",\"deadline\": \"" + deadline + "\"}"; Console.WriteLine("----putPolicy----\n{0}", putPolicy); SimpleUpload su = new SimpleUpload(auth, config); result = su.UploadData(data, putPolicy, key); Console.WriteLine("---UploadData---\n{0}", result.ToString()); // 下面输出的 HASH 值应该一样 if ((int)HttpStatusCode.OK == result.Code) { Console.WriteLine("UploadResult: {0}", Base64.UrlSafeBase64Decode(result.Text)); } Console.WriteLine("UploadData's ETag: {0}", ETag.ComputeEtag(data)); }
public async Task <string> DeleteFile(string fileKey) { string Msg = "删除成功"; Config config = new Config(); config.Zone = Zone.ZoneCnEast; var mac = SetMac(); BucketManager bucketManager = new BucketManager(mac, config); string newKey = "UploadFileTest_337756368.dat"; await bucketManager.Copy(Bucket, "UploadFileTest_337756368.dat", Bucket, newKey); HttpResult deleteRet = await bucketManager.Delete(Bucket, newKey); if (deleteRet.Code != (int)HttpCode.OK) { Msg = "删除失败"; } return(Msg); }
//上传文件 public string UploadFile(string Path, string fileName) { // 生成(上传)凭证时需要使用此Mac // 这个示例单独使用了一个Settings类,其中包含AccessKey和SecretKey // 实际应用中,请自行设置您的AccessKey和SecretKey Mac mac = new Mac(AppCode.AK, AppCode.SK); string bucket = "allfile"; string saveKey = fileName; string localFile = Path; // 上传策略,参见 PutPolicy putPolicy = new PutPolicy(); // 如果需要设置为"覆盖"上传(如果云端已有同名文件则覆盖),请使用 SCOPE = "BUCKET:KEY" putPolicy.Scope = bucket + ":" + saveKey; //putPolicy.Scope = bucket; // 上传策略有效期(对应于生成的凭证的有效期) putPolicy.SetExpires(3600); // 上传到云端多少天后自动删除该文件,如果不设置(即保持默认默认)则不删除 // putPolicy.DeleteAfterDays = 1; string jstr = putPolicy.ToJsonString(); string token = Auth.CreateUploadToken(mac, jstr); UploadManager um = new UploadManager(); //先删除 BucketManager bm = new BucketManager(mac); bm.Delete(bucket, saveKey); HttpResult result = um.UploadFile(localFile, saveKey, token); string res = result.ToString(); if (res.Substring(0, 8) == "code:200") { return(""); } else { res.Logs(); return(res); } }
public ActionResult DeleteQiNiuImage2(string key) { string[] liststr = key.Split('/'); string resultstr = ""; string tempkey = liststr[3].Trim(); try { Mac mac = new Mac("AwGglhX2wy5BX36zbHL_5YfC--EiQFWPdE44oblq", "X7nOg3cLkpVff_ZSor2zTUTmbYeMaJWaujsXX_Yd"); string bucket = "test"; BucketManager bm = new BucketManager(mac); var result = bm.Delete(bucket, tempkey); resultstr = result.Code.ToString(); } catch (Exception ex) { resultstr = ex.ToString(); } return(Json(Comm.ToJsonResult("Success", "成功"), JsonRequestBehavior.AllowGet)); }
public ItemResult <string> OSSImageDelete(string filename) { ItemResult <string> res = new ItemResult <string>(); Mac mac = new Mac(ApplicationContext.AppSetting.QiNiu_AccessKey, ApplicationContext.AppSetting.QiNiu_SecretKey); // 设置存储区域 Config config = new Config(); config.Zone = Zone.ZONE_CN_East; BucketManager bucketManager = new BucketManager(mac, config); Qiniu.Http.HttpResult deleteRet = bucketManager.Delete(ApplicationContext.AppSetting.QiNiu_Bucket, filename); if (deleteRet.Code != (int)Qiniu.Http.HttpCode.OK) { res.Message = deleteRet.ToString(); } else { res.Success = true; } return(res); }
static void Main(string[] args) { Auth auth = EnvUtility.EnvAuth(); Config config = EnvUtility.EnvConfig(); BucketManager bm = new BucketManager(auth, config); // 枚举所有 Buckets HttpResult result = bm.Buckets(); Console.WriteLine("---Buckets---\n{0}", result.ToString()); if ((int)HttpStatusCode.OK == result.Code) { JObject jo = JObject.Parse(result.Text); var buckets = jo["buckets"]; Console.WriteLine("{0} Buckets found:", buckets.Count()); int i = 0; foreach (var bucket in buckets) { // 打印 Bucket 名字 Console.WriteLine("{0}\t{1}", ++i, bucket["name"].ToString()); } } // BucketManager 还有很多函数,以下示范比较粗糙,您需要自己改改! result = bm.BucketList("umu618-docs", 0, null, 1); Console.WriteLine("---BucketList---\n{0}", result.ToString()); result = bm.BucketStat("chentemp|umu618-docs", "2017-07-01", "2017-09-01"); Console.WriteLine("---BucketStat---\n{0}", result.ToString()); result = bm.Stat("umu618-docs", "Go.pdf"); Console.WriteLine("---Stat---\n{0}", result.ToString()); string[] keys = { "Go.pdf" }; result = bm.Prefetch("umu618-docs", keys); Console.WriteLine("---Prefetch---\n{0}", result.ToString()); result = bm.ImageInfo("http://images.w.wcsapi.biz.matocloud.com/1.png"); Console.WriteLine("---ImageInfo---\n{0}", result.ToString()); result = bm.Exif("http://chentemp.w.wcsapi.biz.matocloud.com/IMG_1140.JPG"); Console.WriteLine("---Exif---\n{0}", result.ToString()); result = bm.AvInfo("http://images.w.wcsapi.biz.matocloud.com/1.mp4"); Console.WriteLine("---AvInfo---\n{0}", result.ToString()); result = bm.AvInfo2("http://images.w.wcsapi.biz.matocloud.com/1.mp4"); Console.WriteLine("---AvInfo2---\n{0}", result.ToString()); result = bm.Delete("umu618-docs", "/temp/"); Console.WriteLine("---Delete---\n{0}", result.ToString()); result = bm.Move("umu618-docs", "Go.pdf", "umu618-docs", "golang/Go.pdf"); Console.WriteLine("---Move---\n{0}", result.ToString()); result = bm.Copy("umu618-docs", "data.txt", "umu618-docs", "data.txt"); Console.WriteLine("---Copy---\n{0}", result.ToString()); result = bm.Decompression("umu618-docs", "各种录音程序.7z", "7z", "umu618-docs:exe", "umu618-docs:exe/UMU.list"); Console.WriteLine("---Decompression---\n{0}", result.ToString()); Dictionary <string, string> d = new Dictionary <string, string>(); d.Add("umu618-docs:/", "umu618-docs:UMU.list"); d.Add("umu618-docs:temp", "umu618-docs:temp/UMU.list"); result = bm.Decompression("umu618-docs", "各种录音程序.7z", "7z", d); Console.WriteLine("---Decompression---\n{0}", result.ToString()); result = bm.PersistentStatus("e534f75d41534f468a7efe9a51dc90ad"); Console.WriteLine("---PersistentStatus---\n{0}", result.ToString()); result = bm.SetDeadline("umu618-docs", "Go.pdf", -1); Console.WriteLine("---SetDeadline---\n{0}", result.ToString()); }
public static HttpResult UploadStream(Stream stream, SliceUpload uploader, string policy, string file) { Auth auth = EnvUtility.EnvAuth(); Config config = EnvUtility.EnvConfig(); // 上传到这个 bucket string bucket = "csj-zyk"; string key = file; // 上传前先删除 BucketManager bm = new BucketManager(auth, config); HttpResult result = bm.Delete(bucket, key); long dataSize = GetDataSize(stream.Length); byte[] data = new byte[dataSize]; stream.Read(data, 0, data.Length); // 最后合成文件时的 hash Console.WriteLine("ETag of uploading data: {0}", ETag.ComputeEtag(data)); // 一个小时的超时,转为 UnixTime 毫秒数 long deadline = UnixTimestamp.GetUnixTimestamp(3600) * 1000; string putPolicy = "{\"scope\": \"" + bucket + ":" + key + "\",\"deadline\": \"" + deadline + "\"}"; string uploadToken = auth.CreateUploadToken(putPolicy); // 第一个分片不宜太大,因为可能遇到错误,上传太大是白费流量和时间! const long blockSize = 4 * 1024 * 1024; const int firstChunkSize = 1024; SliceUpload su = uploader; // new SliceUpload(auth, config); result = su.MakeBlock(blockSize, 0, data, 0, firstChunkSize, uploadToken); if ((int)HttpStatusCode.OK == result.Code) { long blockCount = (dataSize + blockSize - 1) / blockSize; string[] contexts = new string[blockCount]; JObject jo = JObject.Parse(result.Text); contexts[0] = jo["ctx"].ToString(); // 上传第 1 个 block 剩下的数据 result = su.Bput(contexts[0], firstChunkSize, data, firstChunkSize, (int)(blockSize - firstChunkSize), uploadToken); if ((int)HttpStatusCode.OK == result.Code) { jo = JObject.Parse(result.Text); contexts[0] = jo["ctx"].ToString(); // 上传后续 block,每次都是一整块上传 for (int blockIndex = 1; blockIndex < blockCount; ++blockIndex) { long leftSize = dataSize - blockSize * blockIndex; int chunkSize = (int)(leftSize > blockSize ? blockSize : leftSize); result = su.MakeBlock(chunkSize, blockIndex, data, (int)(blockSize * blockIndex), chunkSize, uploadToken); if ((int)HttpStatusCode.OK == result.Code) { jo = JObject.Parse(result.Text); contexts[blockIndex] = jo["ctx"].ToString(); } else { return(result); } } // 合成文件,注意与前面打印的 ETag 对比 result = su.MakeFile(dataSize, key, contexts, uploadToken); } } return(result); }
/// <summary> /// 删除文件 /// </summary> /// <param name="fileName"></param> /// <param name="bucketName"></param> public void DeleteFile(string fileName, string bucketName) { var bm = new BucketManager(_mac); // 返回结果存储在result中 HttpResult result = bm.Delete(bucketName, fileName); }
static void Main(string[] args) { Auth auth = EnvUtility.EnvAuth(); Config config = EnvUtility.EnvConfig(); // 上传到这个 bucket string bucket = "umu618-docs"; string key = "U-6M.txt"; // 上传前先删除 BucketManager bm = new BucketManager(auth, config); HttpResult result = bm.Delete(bucket, key); Console.WriteLine("---Delete---\n{0}", result.ToString()); // 在内存构造一个文件内容:2M 个 U,2M 个 M, 2M 个 U const long dataSize = 6 * 1024 * 1024; byte[] data = new byte[dataSize]; int i = 0; for (; i < dataSize / 3; ++i) { data[i] = 85; } for (; i < dataSize / 3 * 2; ++i) { data[i] = 77; } for (; i < dataSize; ++i) { data[i] = 85; } // 最后合成文件时的 hash Console.WriteLine("ETag of uploading data: {0}", ETag.ComputeEtag(data)); // 一个小时的超时,转为 UnixTime 毫秒数 long deadline = UnixTimestamp.GetUnixTimestamp(3600) * 1000; string putPolicy = "{\"scope\": \"" + bucket + ":" + key + "\",\"deadline\": \"" + deadline + "\"}"; Console.WriteLine("----putPolicy----\n{0}", putPolicy); string uploadToken = auth.CreateUploadToken(putPolicy); Console.WriteLine("----uploadToken----\n{0}", uploadToken); // 第一个分片不宜太大,因为可能遇到错误,上传太大是白费流量和时间! const long blockSize = 4 * 1024 * 1024; const int firstChunkSize = 1024; SliceUpload su = new SliceUpload(auth, config); result = su.MakeBlock(blockSize, 0, data, 0, firstChunkSize, uploadToken); Console.WriteLine("---MakeBlock---\n{0}", result.ToString()); if ((int)HttpStatusCode.OK == result.Code) { long blockCount = (dataSize + blockSize - 1) / blockSize; string[] contexts = new string[blockCount]; JObject jo = JObject.Parse(result.Text); contexts[0] = jo["ctx"].ToString(); // 上传第 1 个 block 剩下的数据 result = su.Bput(contexts[0], firstChunkSize, data, firstChunkSize, (int)(blockSize - firstChunkSize), uploadToken); Console.WriteLine("---Bput---\n{0}", result.ToString()); if ((int)HttpStatusCode.OK == result.Code) { jo = JObject.Parse(result.Text); contexts[0] = jo["ctx"].ToString(); // 上传后续 block,每次都是一整块上传 for (int blockIndex = 1; blockIndex < blockCount; ++blockIndex) { long leftSize = dataSize - blockSize * blockIndex; int chunkSize = (int)(leftSize > blockSize ? blockSize : leftSize); result = su.MakeBlock(chunkSize, blockIndex, data, (int)(blockSize * blockIndex), chunkSize, uploadToken); Console.WriteLine("---MakeBlock---\n{0}", result.ToString()); if ((int)HttpStatusCode.OK == result.Code) { jo = JObject.Parse(result.Text); contexts[blockIndex] = jo["ctx"].ToString(); } else { Console.WriteLine("----Exit with error----"); return; } } // 合成文件,注意与前面打印的 ETag 对比 result = su.MakeFile(dataSize, key, contexts, uploadToken); Console.WriteLine("---MakeFile---\n{0}", result.ToString()); } } }