private Dictionary <int, BlkputRet> initloadPuttedCtx() { Dictionary <int, BlkputRet> result = new Dictionary <int, BlkputRet> (); string[] lines = File.ReadAllLines(this.puttedCtxFileName); foreach (string line in lines) { string[] fields = line.Split(','); BlkputRet ret = new BlkputRet(); ret.offset = ulong.Parse(fields[1]); ret.ctx = fields[2]; int idx = int.Parse(fields[0]); result.Add(idx, ret); } return(result); }
/// <summary> /// Uploads the big file ( > 8MB ). /// </summary> /// <param name="token">Token.</param> private void uploadBigFile(string token, BlkputRet[] puttedBlk = null) { uploading = true; Action a = () => { FileInfo finfo = new FileInfo(this.localfile); int blockcount = block_count(finfo.Length); BlkputRet [] blkRets = new BlkputRet[blockcount]; using (FileStream fs = File.OpenRead(this.localfile)) { long totalSent = 0; int readLen = BLOCKSIZE; byte[] buf = new byte[readLen]; for (int i = 0; i < blockcount; i++) { if (puttedBlk != null && i < puttedBlk.Length) { blkRets[i] = puttedBlk[i]; totalSent += (long)blkRets[i].offset; continue; } if (i == blockcount - 1) { readLen = (int)(finfo.Length - i * BLOCKSIZE); buf = new byte[readLen]; } fs.Seek((long)i * BLOCKSIZE, SeekOrigin.Begin); fs.Read(buf, 0, readLen); using (QiniuWebClient client = new QiniuWebClient()) { bool failed = false; client.UploadDataCompleted += (sender, e) => { if (e.Error != null) { onQiniuUploadBlockFailed(new QiniuUploadBlockFailedEventArgs(i, e.Error)); failed = true; return; } else { blkRets [i] = GetBlkPutRet(e.Result); onQiniuUploadBlockCompleted(new QiniuUploadBlockCompletedEventArgs(i, blkRets [i])); } }; client.UploadProgressChanged += (sender, e) => { onQiniuUploadProgressChanged(new QiniuUploadProgressChangedEventArgs(totalSent + e.BytesSent, finfo.Length)); }; client.Timeout += (sender, e) => { onQiniuUploadBlockFailed(new QiniuUploadBlockFailedEventArgs(i, new Exception("QiniuWebClient Timeout."))); failed = true; }; client.UpToken = token; client.Headers.Add("Content-Type", "application/octet-stream"); string url = string.Format("{0}/mkblk/{1}", Config.UP_HOST, readLen); client.iUploadDataAsync(url, "POST", buf); if (failed) { return; } totalSent += readLen; } } } try { byte[] result = Mkfile(blkRets, token, this.key, finfo.Length); if (result != null && result.Length > 0) { onQiniuUploadCompleted(new QiniuUploadCompletedEventArgs(result)); } } catch (Exception e) { onUploadFailed(new QiniuUploadFailedEventArgs(new QiniuWebException(e))); } }; a.BeginInvoke(null, null); }
/// <summary> /// 保存持久化结果至内存 /// </summary> /// <param name="tempFileName"></param> /// <param name="idx"></param> /// <param name="ret"></param> public void Add(int idx, BlkputRet ret) { this.puttedCtx [idx] = ret; }
/// <summary> /// 保存持久化结果至内存和文件. /// </summary> /// <param name="idx">Index.</param> /// <param name="ret">Ret.</param> public void AddAndSave(int idx, BlkputRet ret) { this.Add(idx, ret); this.Save(); }
/// <summary> /// Initializes a new instance of the <see cref="qiniu.QiniuUploadBlockCompletedEventArgs"/> class. /// </summary> /// <param name="index">Index.</param> /// <param name="ctx">Context.</param> public QiniuUploadBlockCompletedEventArgs(int index, BlkputRet ctx) { this.index = index; this.ctx = ctx; }