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);
        }
Beispiel #2
0
        /// <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();
 }
Beispiel #5
0
 /// <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;
 }