private void ListMultiParts() { listPartsRequest = new ListPartsRequest(bucket, key, uploadId); cosXmlServer.ListParts(listPartsRequest, delegate(CosResult cosResult) { lock (syncExit) { if (isExit) { return; } } ListPartsResult result = cosResult as ListPartsResult; //更细listParts UpdateSliceNums(result); //通知执行PartCopy OnInit(); }, delegate(CosClientException clientEx, CosServerException serverEx) { lock (syncExit) { if (isExit) { return; } } if (UpdateTaskState(TaskState.FAILED)) { OnFailed(clientEx, serverEx); } }); }
public static void AsynListParts(COSXML.CosXml cosXml, string bucket, string key, string uploadId) { QLog.D("XIAO", String.Format("currentThread id = {0}", Thread.CurrentThread.ManagedThreadId)); ListPartsRequest request = new ListPartsRequest(bucket, key, uploadId); //设置签名有效时长 request.SetSign(TimeUtils.GetCurrentTime(TimeUnit.SECONDS), 600); cosXml.ListParts(request, delegate(CosResult cosResult) { ListPartsResult result = cosResult as ListPartsResult; Console.WriteLine(result.GetResultInfo()); Console.WriteLine(String.Format("currentThread id = {0}", Thread.CurrentThread.ManagedThreadId)); QLog.D("XIAO", result.GetResultInfo()); }, delegate(CosClientException clientEx, CosServerException serverEx) { if (clientEx != null) { QLog.D("XIAO", clientEx.Message); Console.WriteLine("CosClientException: " + clientEx.StackTrace); } if (serverEx != null) { QLog.D("XIAO", serverEx.Message); Console.WriteLine("CosServerException: " + serverEx.GetInfo()); } Console.WriteLine(String.Format("currentThread id = {0}", Thread.CurrentThread.ManagedThreadId)); }); }
private void ListParts() { listPartsRequest = new ListPartsRequest(bucket, key, uploadId); listPartsRequest.SetSign(TimeUtils.GetCurrentTime(TimeUnit.SECONDS), 600); cosXmlServer.ListParts(listPartsRequest, delegate(CosResult cosResult) { lock (syncExit) { if (isExit) { return; } } ListPartsResult result = cosResult as ListPartsResult; //更新分块 UpdateSliceNums(result); //通知执行PartCopy OnInit(); }, delegate(CosClientException clientEx, CosServerException serverEx) { lock (syncExit) { if (isExit) { return; } } if (UpdateTaskState(TaskState.FAILED)) { OnFailed(clientEx, serverEx); } }); }
public static void ListParts(COSXML.CosXml cosXml, string bucket, string key, string uploadId) { try { ListPartsRequest request = new ListPartsRequest(bucket, key, uploadId); //设置签名有效时长 request.SetSign(TimeUtils.GetCurrentTime(TimeUnit.SECONDS), 600); //执行请求 ListPartsResult result = cosXml.ListParts(request); QLog.D("XIAO", result.GetResultInfo()); Console.WriteLine(result.GetResultInfo()); } catch (COSXML.CosException.CosClientException clientEx) { QLog.D("XIAO", clientEx.Message); Console.WriteLine("CosClientException: " + clientEx.Message); } catch (COSXML.CosException.CosServerException serverEx) { QLog.D("XIAO", serverEx.Message); Console.WriteLine("CosServerException: " + serverEx.GetInfo()); } }
private Tuple <ListPartsResult, List <Part> > GetListParts(string bucket, string key, string uploadId, int partNumberMarker) { var path = bucket + "/" + UrlEncode(key) + "?uploadId=" + uploadId; if (partNumberMarker > 0) { path += "&part-number-marker=" + partNumberMarker; } path += "&max-parts=1000"; var request = new RestRequest(path, Method.GET); var response = client.Execute(request); if (response.StatusCode.Equals(HttpStatusCode.OK)) { var contentBytes = System.Text.Encoding.UTF8.GetBytes(response.Content); var stream = new MemoryStream(contentBytes); ListPartsResult listPartsResult = (ListPartsResult)(new XmlSerializer(typeof(ListPartsResult)).Deserialize(stream)); XDocument root = XDocument.Parse(response.Content); var uploads = (from c in root.Root.Descendants("{http://s3.amazonaws.com/doc/2006-03-01/}Part") select new Part() { PartNumber = int.Parse(c.Element("{http://s3.amazonaws.com/doc/2006-03-01/}PartNumber").Value), ETag = c.Element("{http://s3.amazonaws.com/doc/2006-03-01/}ETag").Value.Replace("\"", "") }); return(new Tuple <ListPartsResult, List <Part> >(listPartsResult, uploads.ToList())); } throw ParseError(response); }
/// 列出已上传的分片 public void ListParts() { //.cssg-snippet-body-start:[list-parts] try { string bucket = "examplebucket-1250000000"; //存储桶,格式:BucketName-APPID string key = "exampleobject"; //对象键 string uploadId = "exampleUploadId"; //初始化分块上传返回的uploadId ListPartsRequest request = new ListPartsRequest(bucket, key, uploadId); //执行请求 ListPartsResult result = cosXml.ListParts(request); //请求成功 //列举已上传的分块 List <COSXML.Model.Tag.ListParts.Part> alreadyUploadParts = result.listParts.parts; Console.WriteLine(result.GetResultInfo()); } catch (COSXML.CosException.CosClientException clientEx) { //请求失败 Console.WriteLine("CosClientException: " + clientEx); } catch (COSXML.CosException.CosServerException serverEx) { //请求失败 Console.WriteLine("CosServerException: " + serverEx.GetInfo()); } //.cssg-snippet-body-end }
/// <summary> /// Gets the list of parts corresponding to a uploadId for given bucket and object /// </summary> /// <param name="bucketName"></param> /// <param name="objectName"></param> /// <param name="uploadId"></param> /// <param name="partNumberMarker"></param> /// <param name="cancellationToken">Optional cancellation token to cancel the operation</param> /// <returns></returns> private async Task <Tuple <ListPartsResult, List <Part> > > GetListPartsAsync(string bucketName, string objectName, string uploadId, int partNumberMarker, CancellationToken cancellationToken) { var resourcePath = "?uploadId=" + uploadId; if (partNumberMarker > 0) { resourcePath += "&part-number-marker=" + partNumberMarker; } resourcePath += "&max-parts=1000"; var request = await this.CreateRequest(Method.GET, bucketName, objectName : objectName, resourcePath : resourcePath ); var response = await this.ExecuteTaskAsync(this.NoErrorHandlers, request, cancellationToken); var contentBytes = System.Text.Encoding.UTF8.GetBytes(response.Content); ListPartsResult listPartsResult = null; using (var stream = new MemoryStream(contentBytes)) listPartsResult = (ListPartsResult)(new XmlSerializer(typeof(ListPartsResult)).Deserialize(stream)); XDocument root = XDocument.Parse(response.Content); var uploads = (from c in root.Root.Descendants("{http://s3.amazonaws.com/doc/2006-03-01/}Part") select new Part() { PartNumber = int.Parse(c.Element("{http://s3.amazonaws.com/doc/2006-03-01/}PartNumber").Value, CultureInfo.CurrentCulture), ETag = c.Element("{http://s3.amazonaws.com/doc/2006-03-01/}ETag").Value.Replace("\"", ""), size = long.Parse(c.Element("{http://s3.amazonaws.com/doc/2006-03-01/}Size").Value, CultureInfo.CurrentCulture) }); return(new Tuple <ListPartsResult, List <Part> >(listPartsResult, uploads.ToList())); }
private void UpdateSliceNums(ListPartsResult listPartsResult) { try { if (listPartsResult.listParts.parts != null) { //获取原来的parts并提取partNumber Dictionary <int, SliceStruct> sourceParts = new Dictionary <int, SliceStruct>(sliceList.Count); foreach (SliceStruct sliceStruct in sliceList) { sourceParts.Add(sliceStruct.partNumber, sliceStruct); } foreach (ListParts.Part part in listPartsResult.listParts.parts) { int partNumber = -1; bool parse = int.TryParse(part.partNumber, out partNumber); if (!parse) { throw new ArgumentException("ListParts.Part parse error"); } SliceStruct sliceStruct = sourceParts[partNumber]; sliceStruct.isAlreadyUpload = true; sliceStruct.eTag = part.eTag; lock (syncProgress) { long size = 0L; long.TryParse(part.size, out size); hasReceiveDataLength += size; } } } } catch (Exception ex) { lock (syncExit) { if (isExit) { return; } } if (UpdateTaskState(TaskState.Failed)) { OnFailed(new CosClientException((int)CosClientError.InternalError, ex.Message, ex), null); } } }
public async Task <ListPartsResult> ListMultiUploadParts(string buketName, string key, string uploadId) { ListPartsResult result = null; OssHttpRequestMessage httpRequestMessage = null; HttpResponseMessage response = null; try { Dictionary <string, string> parameters = new Dictionary <string, string>(); parameters.Add("uploadId", uploadId); httpRequestMessage = new OssHttpRequestMessage(buketName, key, parameters); httpRequestMessage.Method = HttpMethod.Get; httpRequestMessage.Headers.Date = DateTime.UtcNow; OssRequestSigner.Sign(httpRequestMessage, networkCredential); response = await httpClient.SendAsync(httpRequestMessage); if (response.IsSuccessStatusCode == false) { await ErrorResponseHandler.Handle(response); } var temp = DeserializerFactory.GetFactory().CreateListPartsDeserialzer(); result = await temp.Deserialize(response); } catch (Exception ex) { throw ex; } finally { if (httpRequestMessage != null) { httpRequestMessage.Dispose(); } if (response != null) { response.Dispose(); } } return(result); }
public void AsynListParts(COSXML.CosXml cosXml, string bucket, string key, string uploadId) { ListPartsRequest request = new ListPartsRequest(bucket, key, uploadId); //设置签名有效时长 request.SetSign(TimeUtils.GetCurrentTime(TimeUnit.SECONDS), 600); cosXml.ListParts(request, delegate(CosResult cosResult) { ListPartsResult result = cosResult as ListPartsResult; Console.WriteLine(result.GetResultInfo()); }, delegate(CosClientException clientEx, CosServerException serverEx) { Console.WriteLine(clientEx == null ? serverEx.GetInfo() : clientEx.Message); }); }
public void MarshalResponse(IConfig config, ListPartsResponse response, IDictionary <string, string> headers, Stream responseStream) { response.AbortsOn = headers.GetHeaderDate(AmzHeaders.XAmzAbortDate, DateTimeFormat.Iso8601DateTimeExt); response.AbortRuleId = headers.GetHeader(AmzHeaders.XAmzAbortRuleId); response.RequestCharged = headers.ContainsKey(AmzHeaders.XAmzRequestCharged); XmlSerializer s = new XmlSerializer(typeof(ListPartsResult)); using (XmlTextReader r = new XmlTextReader(responseStream)) { r.Namespaces = false; ListPartsResult listResult = (ListPartsResult)s.Deserialize(r); if (listResult.EncodingType != null) { response.EncodingType = ValueHelper.ParseEnum <EncodingType>(listResult.EncodingType); } response.ObjectKey = config.AutoUrlDecodeResponses && response.EncodingType == EncodingType.Url ? WebUtility.UrlDecode(listResult.Key) : listResult.Key; response.BucketName = listResult.Bucket; response.UploadId = listResult.UploadId; if (listResult.StorageClass != null) { response.StorageClass = ValueHelper.ParseEnum <StorageClass>(listResult.StorageClass); } response.PartNumberMarker = listResult.PartNumberMarker; response.NextPartNumberMarker = listResult.NextPartNumberMarker; response.MaxParts = listResult.MaxParts; response.IsTruncated = listResult.IsTruncated; if (listResult.Owner != null) { response.Owner = new S3Identity(); response.Owner.Name = listResult.Owner.DisplayName; response.Owner.Id = listResult.Owner.Id; } if (listResult.Initiator != null) { response.Initiator = new S3Identity(); response.Initiator.Name = listResult.Initiator.DisplayName; response.Initiator.Id = listResult.Initiator.Id; } if (listResult.Parts != null) { response.Parts = new List <S3Part>(listResult.Parts.Count); foreach (Part part in listResult.Parts) { S3Part s3Part = new S3Part(); s3Part.ETag = part.ETag; s3Part.LastModified = part.LastModified; s3Part.PartNumber = part.PartNumber; s3Part.Size = part.Size; response.Parts.Add(s3Part); } } else { response.Parts = Array.Empty <S3Part>(); } } }
public void MultiUpload() { string key = multiKey; try { InitMultipartUploadRequest initMultipartUploadRequest = new InitMultipartUploadRequest(bucket, multiKey); //执行请求 InitMultipartUploadResult initMultipartUploadResult = cosXml.InitMultipartUpload(initMultipartUploadRequest); Console.WriteLine(initMultipartUploadResult.GetResultInfo()); string uploadId = initMultipartUploadResult.initMultipartUpload.uploadId; ListPartsRequest listPartsRequest = new ListPartsRequest(bucket, key, uploadId); //执行请求 ListPartsResult listPartsResult = cosXml.ListParts(listPartsRequest); Console.WriteLine(listPartsResult.GetResultInfo()); int partNumber = 1; UploadPartRequest uploadPartRequest = new UploadPartRequest(bucket, key, partNumber, uploadId, bigFileSrcPath); //设置进度回调 uploadPartRequest.SetCosProgressCallback(delegate(long completed, long total) { Console.WriteLine(String.Format("{0} progress = {1} / {2} : {3:##.##}%", DateTime.Now.ToString(), completed, total, completed * 100.0 / total)); }); //执行请求 UploadPartResult uploadPartResult = cosXml.UploadPart(uploadPartRequest); Console.WriteLine(uploadPartResult.GetResultInfo()); string eTag = uploadPartResult.eTag; CompleteMultipartUploadRequest completeMultiUploadRequest = new CompleteMultipartUploadRequest(bucket, key, uploadId); //设置已上传的parts completeMultiUploadRequest.SetPartNumberAndETag(partNumber, eTag); //执行请求 CompleteMultipartUploadResult completeMultiUploadResult = cosXml.CompleteMultiUpload(completeMultiUploadRequest); Console.WriteLine(completeMultiUploadResult.GetResultInfo()); } catch (COSXML.CosException.CosClientException clientEx) { Console.WriteLine("CosClientException: " + clientEx.StackTrace); Assert.True(false); } catch (COSXML.CosException.CosServerException serverEx) { Console.WriteLine("CosServerException: " + serverEx.GetInfo()); Assert.True(false); } }
public void MarshalResponse(ListPartsRequest request, ListPartsResponse response, IDictionary <string, string> headers, Stream responseStream) { XmlSerializer s = new XmlSerializer(typeof(ListPartsResult)); using (XmlTextReader r = new XmlTextReader(responseStream)) { r.Namespaces = false; ListPartsResult listResult = (ListPartsResult)s.Deserialize(r); response.Bucket = listResult.Bucket; response.Key = listResult.Key; response.UploadId = listResult.UploadId; if (listResult.StorageClass != null) { response.StorageClass = EnumsNET.Enums.Parse <StorageClass>(listResult.StorageClass, EnumFormat.EnumMemberValue); } response.PartNumberMarker = listResult.PartNumberMarker; response.NextPartNumberMarker = listResult.NextPartNumberMarker; response.MaxParts = listResult.MaxParts; response.IsTruncated = listResult.IsTruncated; if (listResult.EncodingType != null) { response.EncodingType = EnumsNET.Enums.Parse <EncodingType>(listResult.EncodingType, EnumFormat.EnumMemberValue); } if (listResult.Owner != null) { response.Owner = new S3ObjectIdentity(); response.Owner.Name = listResult.Owner.DisplayName; response.Owner.Id = listResult.Owner.Id; } if (listResult.Initiator != null) { response.Initiator = new S3ObjectIdentity(); response.Initiator.Name = listResult.Initiator.DisplayName; response.Initiator.Id = listResult.Initiator.Id; } if (listResult.Part != null) { response.Parts = new List <S3Part>(listResult.Part.Count); foreach (Part part in listResult.Part) { S3Part s3Part = new S3Part(); s3Part.ETag = part.ETag; s3Part.LastModified = part.LastModified; s3Part.PartNumber = part.PartNumber; s3Part.Size = part.Size; response.Parts.Add(s3Part); } } else { response.Parts = Array.Empty <S3Part>(); } } }