/// <summary>
        /// 获取服务器上文件分片的信息
        /// </summary>
        /// <param name="uploadId">当前上传事件的唯一标识</param>
        /// <returns>服务器上的分片信息列表</returns>
        public List<FilePart> GetParts(String uploadId)
        {
            var qs = new QueryString();
            qs.Add("uploadId", uploadId);

            var getParts = client.HttpGet("/video/multipartUpload/getParts.api", qs);
            var jo = JObject.Parse(getParts);

            if (jo["statusCode"].ToString().CompareTo("0") == 0)
            {
                var serverParts = new List<FilePart>();
                foreach (var jObj in jo["uploadedParts"])
                {
                    var filePart = new FilePart();
                    filePart.PartKey = jObj["partKey"].ToString();
                    filePart.PartMD5 = jObj["partMD5"].ToString();
                    filePart.PartNum = System.Int32.Parse(jObj["partNumber"].ToString());
                    serverParts.Add(filePart);
                }
                return serverParts;
            }
            else
            {
                throw new PispowerAPIException(System.Int32.Parse(jo["statusCode"].ToString()), jo["message"].ToString());
            }
        }
 /// <summary>
 /// 服务器上的某个分片是否在本地文件分片列表中
 /// </summary>
 /// <param name="serverPart">服务器上的某一分片</param>
 /// <param name="localParts">本地待上传文件分片列表</param>
 private int inLocalParts(FilePart serverPart, List<FilePart> localParts)
 {
     foreach (var localPart in localParts)
     {
         if (serverPart.PartMD5.CompareTo(localPart.PartMD5) == 0 && serverPart.PartNum.CompareTo(localPart.PartNum) == 0)
         {
             return localParts.IndexOf(localPart);
         }
     }
     return -1;
 }
        /// <summary>
        /// 上传一个分片
        /// </summary>
        /// <param name="uploadId">当前上传事件的唯一标识</param>
        /// <param name="partNumber">分片num编号</param>
        /// <param name="part">分片文件</param>
        private FilePart UploadPart(String uploadId, int partNumber, System.IO.FileInfo part)
        {
            QueryString qs = new QueryString();
            qs.Add("uploadId", uploadId);
            qs.Add("partNumber", partNumber.ToString());

            using (var fs = File.OpenRead(part.FullName))
            {
                var uploadPart = client.HttpUpload("/video/multipartUpload/uploadPart.api", qs, fs);
                var jo = JObject.Parse(uploadPart);

                if (jo["statusCode"].ToString().CompareTo("0") == 0)
                {
                    var filePart = new FilePart();
                    filePart.PartNum = partNumber;
                    filePart.PartMD5 = jo["partMD5"].ToString();
                    filePart.PartKey = jo["partKey"].ToString();

                    return filePart;
                }
                else
                {
                    throw new PispowerAPIException(System.Int32.Parse(jo["statusCode"].ToString()), jo["message"].ToString());
                }
            }
        }
        /// <summary>
        /// 获得本地文件分片列表
        /// </summary>
        /// <param name="files">本地文件分片数组</param>
        /// <returns></returns>
        private List<FilePart> GetLocalParts(System.IO.FileInfo[] files)
        {
            var localFileParts = new List<FilePart>();

            foreach (var file in files)
            {
                var filePart = new FilePart();
                var name = Path.GetFileName(file.FullName).Split(new Char[] { '.' });

                filePart.FilePartInfo = file;
                filePart.PartNum = System.Int32.Parse(name[1]);
                using (var fileStream = new FileStream(file.FullName, FileMode.Open, FileAccess.Read))
                {
                    filePart.PartMD5 = MD5Utility.Compute(file).ToLower();
                }
                localFileParts.Add(filePart);
            }
            return localFileParts;
        }