/// <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; }