Exemple #1
0
 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);
         }
     });
 }
Exemple #2
0
        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));
            });
        }
Exemple #3
0
 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);
         }
     });
 }
Exemple #4
0
        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());
            }
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        /// 列出已上传的分片
        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
        }
Exemple #7
0
        /// <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()));
        }
Exemple #8
0
        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);
                }
            }
        }
Exemple #9
0
        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);
        }
Exemple #10
0
        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>();
                }
            }
        }