Пример #1
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
        }
Пример #2
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);
         }
     });
 }
Пример #3
0
        public void MultipartUploadAbortInMiddleTest()
        {
            var sourceFile = Config.MultiUploadTestFile;
            //get target object name
            var targetObjectKey = OssTestUtils.GetObjectKey(_className);

            var initRequest = new InitiateMultipartUploadRequest(_bucketName, targetObjectKey);
            var initResult  = _ossClient.InitiateMultipartUpload(initRequest);

            // Set the part size
            const int partSize = 1024 * 1024 * 1;

            var partFile = new FileInfo(sourceFile);
            // Calculate the part count
            var partCount = OssTestUtils.CalculatePartCount(partFile.Length, partSize);

            Assert.IsTrue(partCount > 1, "Source file is too small to perform multipart upload");
            LogUtility.LogMessage("File {0} is splitted to {1} parts for multipart upload",
                                  sourceFile, partCount);

            // Create a list to save result
            var partETags = new List <PartETag>();

            //upload the file
            using (var fs = new FileStream(partFile.FullName, FileMode.Open))
            {
                //use partCount - 1, so that the last part is left
                for (var i = 0; i < partCount - 1; i++)
                {
                    // Skip to the start position
                    long skipBytes = partSize * i;
                    fs.Position = skipBytes;

                    // calculate the part size
                    var size = partSize < partFile.Length - skipBytes
                        ? partSize
                        : partFile.Length - skipBytes;

                    // Create a UploadPartRequest, uploading parts
                    var uploadPartRequest = new UploadPartRequest(_bucketName, targetObjectKey, initResult.UploadId);
                    uploadPartRequest.InputStream = fs;
                    uploadPartRequest.PartSize    = size;
                    uploadPartRequest.PartNumber  = (i + 1);
                    var uploadPartResult = _ossClient.UploadPart(uploadPartRequest);

                    // Save the result
                    partETags.Add(uploadPartResult.PartETag);

                    //list parts which are uploaded
                    var listPartsRequest = new ListPartsRequest(_bucketName, targetObjectKey, initResult.UploadId);
                    var listPartsResult  = _ossClient.ListParts(listPartsRequest);
                    //there should be only 1 part was not uploaded
                    Assert.AreEqual(i + 1, OssTestUtils.ToArray <Part>(listPartsResult.Parts).Count, "uploaded parts is not expected");
                }
            }
            //abort the upload
            var abortRequest = new AbortMultipartUploadRequest(_bucketName, targetObjectKey, initResult.UploadId);

            _ossClient.AbortMultipartUpload(abortRequest);
        }
        static void ListParts()
        {
            try
            {
                ListPartsRequest request = new ListPartsRequest()
                {
                    BucketName       = bucketName,
                    ObjectKey        = objectName,
                    UploadId         = uploadId,
                    MaxParts         = 10,
                    PartNumberMarker = 1,
                };
                ListPartsResponse response = client.ListParts(request);

                Console.WriteLine("List parts response: {0}", response.StatusCode);
                Console.WriteLine("Lis parts count: " + response.Parts.Count);

                foreach (PartETag part in response.Parts)
                {
                    Console.WriteLine("PartNumber: {0}", part.PartNumber);
                    Console.WriteLine("ETag: {0}", part.ETag);
                }
            }
            catch (ObsException ex)
            {
                Console.WriteLine("Exception errorcode: {0}, when list parts.", ex.ErrorCode);
                Console.WriteLine("Exception errormessage: {0}", ex.ErrorMessage);
            }
        }
Пример #5
0
        public void MultipartUploadAbortInMiddleTest()
        {
            var sourceFile = Config.MultiUploadSampleFile;
            //get target object name
            var targetObjectKey = OssTestUtils.GetObjectKey(_className);

            var initRequest = new InitiateMultipartUploadRequest(_bucketName, targetObjectKey);
            var initResult  = _ossClient.InitiateMultipartUpload(initRequest);

            // 设置每块为 1M
            const int partSize = 1024 * 1024 * 1;

            var partFile = new FileInfo(sourceFile);
            // 计算分块数目
            var partCount = OssTestUtils.CalculatePartCount(partFile.Length, partSize);

            Assert.IsTrue(partCount > 1, "Source file is too small to perform multipart upload");
            LogUtility.LogMessage("File {0} is splitted to {1} parts for multipart upload",
                                  sourceFile, partCount);

            // 新建一个List保存每个分块上传后的ETag和PartNumber
            var partETags = new List <PartETag>();

            //upload the file
            using (var fs = new FileStream(partFile.FullName, FileMode.Open))
            {
                //use partCount - 1, so that the last part is left
                for (var i = 0; i < partCount - 1; i++)
                {
                    // 跳到每个分块的开头
                    long skipBytes = partSize * i;
                    fs.Position = skipBytes;

                    // 计算每个分块的大小
                    var size = partSize < partFile.Length - skipBytes
                        ? partSize
                        : partFile.Length - skipBytes;

                    // 创建UploadPartRequest,上传分块
                    var uploadPartRequest = new UploadPartRequest(_bucketName, targetObjectKey, initResult.UploadId);
                    uploadPartRequest.InputStream = fs;
                    uploadPartRequest.PartSize    = size;
                    uploadPartRequest.PartNumber  = (i + 1);
                    var uploadPartResult = _ossClient.UploadPart(uploadPartRequest);

                    // 将返回的PartETag保存到List中。
                    partETags.Add(uploadPartResult.PartETag);

                    //list parts which are uploaded
                    var listPartsRequest = new ListPartsRequest(_bucketName, targetObjectKey, initResult.UploadId);
                    var listPartsResult  = _ossClient.ListParts(listPartsRequest);
                    //there should be only 1 part was not uploaded
                    Assert.AreEqual(i + 1, listPartsResult.Parts.Count(), "uploaded parts is not expected");
                }
            }
            //abort the upload
            var abortRequest = new AbortMultipartUploadRequest(_bucketName, targetObjectKey, initResult.UploadId);

            _ossClient.AbortMultipartUpload(abortRequest);
        }
Пример #6
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());
            }
        }
Пример #7
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));
            });
        }
 public static ListPartsCommand Create(IServiceClient client, Uri endpoint, ExecutionContext context,
                                       ListPartsRequest listPartsRequest)
 {
     return(new ListPartsCommand(client, endpoint, context,
                                 DeserializerFactory.GetFactory().CreateListPartsResultDeserializer(),
                                 listPartsRequest));
 }
Пример #9
0
        /// <summary>
        /// List parts that have been uploaded for a large file that has not been finished yet.
        /// </summary>
        /// <param name="fileId">The large file id whose parts you want to list.</param>
        /// <exception cref="AuthenticationException">Thrown when authentication fails.</exception>
        /// <exception cref="ApiException">Thrown when an error occurs during client operation.</exception>
        async Task <IApiResults <ListPartsResponse> > IStorageParts.ListAsync
            (string fileId)
        {
            var request = new ListPartsRequest(fileId);

            return(await _client.ListPartsAsync(request, _cancellationToken));
        }
Пример #10
0
        public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems)
        {
            AmazonGlacierConfig config = new AmazonGlacierConfig();

            config.RegionEndpoint = region;
            ConfigureClient(config);
            AmazonGlacierClient client = new AmazonGlacierClient(creds, config);

            ListPartsResponse resp = new ListPartsResponse();

            do
            {
                ListPartsRequest req = new ListPartsRequest
                {
                    Marker = resp.Marker
                    ,
                    Limit = maxItems
                };

                resp = client.ListParts(req);
                CheckError(resp.HttpStatusCode, "200");

                foreach (var obj in resp.Parts)
                {
                    AddObject(obj);
                }
            }while (!string.IsNullOrEmpty(resp.Marker));
        }
Пример #11
0
        internal ListPartsResponse ListParts(ListPartsRequest request)
        {
            var marshaller   = new ListPartsRequestMarshaller();
            var unmarshaller = ListPartsResponseUnmarshaller.Instance;

            return(Invoke <ListPartsRequest, ListPartsResponse>(request, marshaller, unmarshaller));
        }
Пример #12
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);
         }
     });
 }
Пример #13
0
        public Task <ListPartsResponse> ListPartsAsync(string bucketName, string resource, string uploadId, Action <ListPartsRequest> config = null, CancellationToken token = default)
        {
            ListPartsRequest req = new ListPartsRequest(bucketName, resource, uploadId);

            config?.Invoke(req);

            return(_operations.ListPartsAsync(req, token));
        }
Пример #14
0
        /// <summary>
        /// Initiates the asynchronous execution of the ListParts operation.
        /// <seealso cref="Amazon.Glacier.IAmazonGlacier"/>
        /// </summary>
        ///
        /// <param name="request">Container for the necessary parameters to execute the ListParts operation.</param>
        /// <param name="cancellationToken">
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// </param>
        /// <returns>The task object representing the asynchronous operation.</returns>
        public Task <ListPartsResponse> ListPartsAsync(ListPartsRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var marshaller   = new ListPartsRequestMarshaller();
            var unmarshaller = ListPartsResponseUnmarshaller.Instance;

            return(InvokeAsync <ListPartsRequest, ListPartsResponse>(request, marshaller,
                                                                     unmarshaller, cancellationToken));
        }
Пример #15
0
        public async Task GetEnumerableAsync()
        {
            var request    = new ListPartsRequest(_fileId);
            var enumerable = await Storage.Parts.GetEnumerableAsync(request);

            Assert.Equal(typeof(PartEnumerable), enumerable.GetType());
            Assert.True(enumerable.ToList().Count() == 2, "The actual count was not two");
        }
Пример #16
0
        public Task <ListPartsResponse> ListPartsAsync(string bucketName, string objectKey, string uploadId, Action <ListPartsRequest>?config = null, CancellationToken token = default)
        {
            ListPartsRequest req = new ListPartsRequest(bucketName, objectKey, uploadId);

            config?.Invoke(req);

            return(MultipartOperations.ListPartsAsync(req, token));
        }
Пример #17
0
 /// <summary>
 /// List uploaded parts.
 /// </summary>
 /// <param name="request">Parameters in a request for listing uploaded parts</param>
 /// <returns>Response to a request for listing uploaded parts</returns>
 public ListPartsResponse ListParts(ListPartsRequest request)
 {
     return(this.DoRequest <ListPartsRequest, ListPartsResponse>(request, delegate()
     {
         if (request.ObjectKey == null)
         {
             throw new ObsException(Constants.InvalidObjectKeyMessage, ErrorType.Sender, Constants.InvalidObjectKey, "");
         }
         if (string.IsNullOrEmpty(request.UploadId))
         {
             throw new ObsException(Constants.InvalidUploadIdMessage, ErrorType.Sender, Constants.InvalidUploadId, "");
         }
     }));
 }
Пример #18
0
        /// <summary>
        /// 上传完成
        /// </summary>
        /// <param name="task"></param>
        private void UploadComplete(OssTaskDO task)
        {
            //如果是暂停就跳出
            if (task.Progress < task.TotalProgress - 1)
            {
                //关闭内存流
                this.Close(task);
                //清除配置文件,只有删除状态删除配置
                if (task.Status == OssTaskStatus.DELETE)
                {
                    this.ClearConfig(task);
                }
                return;
            }

            //线上检查
            var ossPath          = CheckOssPath(task.UploadOssPath + @"/" + task.UploadOssName);
            var listPartsRequest = new ListPartsRequest(aliyunOSSConfig.BucketName, ossPath, task.UploadOssId);
            var listPartsResult  = client.ListParts(listPartsRequest);

            //生成Tag
            var             completeMultipartUploadRequest = new CompleteMultipartUploadRequest(aliyunOSSConfig.BucketName, ossPath, task.UploadOssId);
            List <PartETag> eTags = new List <PartETag>();

            foreach (var item in task.UploadETag)
            {
                var values = item.Split(',');
                eTags.Add(new PartETag(Convert.ToInt32(values[0]), values[1], values[2], Convert.ToInt64(values[3])));
            }
            eTags.Sort((x, y) => x.PartNumber.CompareTo(y.PartNumber));
            eTags.ForEach(it => completeMultipartUploadRequest.PartETags.Add(it));


            //合并文件上传完成
            client.CompleteMultipartUpload(completeMultipartUploadRequest);


            //保存配置
            task.Status         = OssTaskStatus.COMPLETE;
            task.ActualProgress = 100;
            SaveOssTaskConfig(taskList);

            //关闭内存流
            this.Close(task);
            //清除配置文件
            this.ClearConfig(task);

            //执行回执
            downloadCompleteCallBack?.Invoke(task);
        }
 /// <summary>
 /// Start the asynchronous request for listing uploaded parts.
 /// </summary>
 /// <param name="request">Parameters in a request for listing uploaded parts</param>
 /// <param name="callback">Asynchronous request callback function</param>
 /// <param name="state">Asynchronous request status object</param>
 /// <returns>Response to the asynchronous request</returns>
 public IAsyncResult BeginListParts(ListPartsRequest request, AsyncCallback callback, object state)
 {
     return(this.BeginDoRequest <ListPartsRequest>(request, delegate()
     {
         if (request.ObjectKey == null)
         {
             throw new ObsException(Constants.InvalidObjectKeyMessage, ErrorType.Sender, Constants.InvalidObjectKey, "");
         }
         if (string.IsNullOrEmpty(request.UploadId))
         {
             throw new ObsException(Constants.InvalidUploadIdMessage, ErrorType.Sender, Constants.InvalidUploadId, "");
         }
     }, callback, state));
 }
Пример #20
0
        private static void Populate(ListPartsRequest listPartsRequst, IDictionary <string, string> parameters)
        {
            parameters[RequestParameters.UPLOAD_ID] = listPartsRequst.UploadId;

            if (listPartsRequst.MaxParts != null)
            {
                parameters[RequestParameters.MAX_PARTS] = listPartsRequst.MaxParts.ToString();
            }

            if (listPartsRequst.PartNumberMarker != null)
            {
                parameters[RequestParameters.PART_NUMBER_MARKER] = listPartsRequst.PartNumberMarker.ToString();
            }
        }
Пример #21
0
        public void ListPartsRequestArgumentCheck()
        {
            var targetObjectKey = OssTestUtils.GetObjectKey(_className);

            try
            {
                var listRequest = new ListPartsRequest(_bucketName, targetObjectKey, null);
                _ossClient.ListParts(listRequest);
                Assert.Fail("the arg is null, should throw exception.");
            }
            catch (Exception e)
            {
                Assert.IsTrue(e.Message.Contains("uploadId"));
            }
        }
        private ListPartsCommand(IServiceClient client, Uri endpoint, ExecutionContext context,
                                 IDeserializer <ServiceResponse, PartListing> deserializeMethod,
                                 ListPartsRequest listPartsRequest)
            : base(client, endpoint, context, deserializeMethod)
        {
            OssUtils.CheckBucketName(listPartsRequest.BucketName);
            OssUtils.CheckObjectKey(listPartsRequest.Key);

            if (string.IsNullOrEmpty(listPartsRequest.UploadId))
            {
                throw new ArgumentException(Resources.ExceptionIfArgumentStringIsNullOrEmpty, "uploadId");
            }

            _listPartsRequest = listPartsRequest;
        }
Пример #23
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);
            });
        }
Пример #24
0
        /// <summary>
        /// Send a ListPartsRequest request and return a list of all uploaded parts.
        /// </summary>
        /// <param name="existingBucketName"></param>
        /// <param name="keyName"></param>
        /// <param name="uploadID"></param>
        /// <param name="token"></param>
        /// <returns>Task<List<PartDetail>></returns>
        public async Task <List <PartDetail> > ListPartsAsync(string existingBucketName, string keyName, string uploadId, CancellationToken token)
        {
            token.ThrowIfCancellationRequested();

            _log.Debug("Called ListPartsAsync with parameters keyName = \"" + keyName + "\" and uploadID = \"" + uploadId + "\".");

            List <PartDetail> parts = new List <PartDetail>();

            try
            {
                ListPartsRequest request = new ListPartsRequest();
                request.BucketName = existingBucketName;
                request.Key        = keyName;
                request.UploadId   = uploadId;

                ListPartsResponse response = await this.s3Client.ListPartsAsync(request, token).ConfigureAwait(false);

                parts.AddRange(response.Parts);

                while (response.IsTruncated)
                {
                    token.ThrowIfCancellationRequested();

                    request.PartNumberMarker = response.NextPartNumberMarker.ToString();
                    response = await this.s3Client.ListPartsAsync(request, token).ConfigureAwait(false);

                    parts.AddRange(response.Parts);
                }

                return(parts);
            }
            catch (Exception e)
            {
                if (!(e is TaskCanceledException || e is OperationCanceledException))
                {
                    string messagePart = " with parameters keyName = \"" + keyName + "\" and uploadID = \"" + uploadId + "\"";

                    this.LogAmazonException(messagePart, e);
                }

                throw;
            }
        }
        /// <summary>
        /// 根据款号查询文件夹位置
        /// </summary>
        /// <param name="style"></param>
        /// <returns></returns>
        public string GetObjectlist(string style)
        {
            const string     accessId   = "X9foTnzzxHCk6gK7";
            const string     accessKey  = "ArQYcpKLbaGweM8p1LQDq5kG1VIMuz";
            const string     endpoint   = "http://oss-cn-shenzhen.aliyuncs.com";
            const string     bucketName = "best-bms";
            ListPartsRequest lir        = new ListPartsRequest(bucketName, accessKey, accessId);

            Aliyun.OpenServices.ClientConfiguration configu = new Aliyun.OpenServices.ClientConfiguration();
            OssClient client     = new OssClient(endpoint, accessId, accessKey);
            string    Uploadpath = "";
            DataTable tab        = new DataTable();

            tab.Columns.Add("Cat", typeof(string));
            tab.Columns.Add("Cat2", typeof(string));
            tab.Columns.Add("Style", typeof(string));
            tab.Columns.Add("Scode", typeof(string));
            tab.Columns.Add("Image", typeof(string));
            try
            {
                ObjectListing list = client.ListObjects(bucketName);
                IEnumerable <OssObjectSummary> objects = list.ObjectSummaries;

                string[] arr;
                foreach (OssObjectSummary ob in objects)
                {
                    arr = ob.Key.Split('/');
                    if (arr.Length == 5)
                    {
                        tab.Rows.Add(new object[] { arr[1], arr[2], arr[3], arr[4] });
                        if (arr[3] == style)//查找style文件夹
                        {
                            Uploadpath = arr[0] + "/" + arr[1] + "/" + arr[2] + "/" + arr[3] + "/";
                        }
                    }
                }
            }
            catch (OssException ex)
            {
            }
            return(Uploadpath);
        }
Пример #26
0
 public Task <ListPartsResponse> ListPartsAsync(ListPartsRequest request, CancellationToken token = default)
 {
     return(_requestHandler.SendRequestAsync <ListPartsRequest, ListPartsResponse>(request, token));
 }
Пример #27
0
 public void ListParts(ListPartsRequest request, Callback.OnSuccessCallback <CosResult> successCallback, Callback.OnFailedCallback failCallback)
 {
     Schedue(request, new ListPartsResult(), successCallback, failCallback);
 }
Пример #28
0
 public ListPartsResult ListParts(ListPartsRequest request)
 {
     return((Model.Object.ListPartsResult)Excute(request, new Model.Object.ListPartsResult()));
 }
Пример #29
0
 public Task <ListPartsResponse> ListPartsAsync(ListPartsRequest request, CancellationToken cancellationToken = default)
 {
     throw new NotImplementedException();
 }
Пример #30
0
        private static async Task UploadFileAsync(string filePath)
        {
            try
            {
                List <UploadPartResponse> uploadResponses = new List <UploadPartResponse>();
                var j = new FileInfo(filePath);
                //do some logic...
                var uploadToApi = await ffApi.GetUploadOnFileName(j.Name);

                string uploadId = uploadToApi.S3Id;
                if (uploadToApi.Id == null || uploadToApi.Status == UploadType.Uploaded)
                {
                    string key = generateID();

                    Amazon.S3.Model.InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest
                    {
                        BucketName = bucketName,
                        Key        = key,
                        CannedACL  = S3CannedACL.AuthenticatedRead
                    };
                    request.Metadata.Add("fname", j.Name);
                    request.Metadata.Add("transfer-created", DateTime.UtcNow.ToString());
                    request.Metadata.Add("up-version", "0.1;closed");
                    InitiateMultipartUploadResponse response = await s3Client.InitiateMultipartUploadAsync(request);

                    uploadId    = response.UploadId;
                    uploadToApi = await ffApi.CreateUpload(new Upload
                    {
                        filename = j.Name,
                        S3Id     = uploadId,
                        Key      = key,
                        Status   = UploadType.Initialized
                    });
                }
                Console.WriteLine("uploadid: " + uploadId);
                // Upload parts.
                long contentLength = new FileInfo(filePath).Length;
                long partSize      = 50000000; // 50 mb
                Console.WriteLine("part size: " + partSize + " bytes");
                Console.WriteLine("Finding parts");
                //first we check for the parts..
                ListPartsRequest listPartsRequest = new ListPartsRequest
                {
                    BucketName = bucketName,
                    Key        = uploadToApi.Key,
                    UploadId   = uploadId
                };
                var listParts = await s3Client.ListPartsAsync(listPartsRequest);

                int  currentPart  = Math.Max(listParts.NextPartNumberMarker, 0);
                long filePosition = currentPart * partSize;
                for (int i = currentPart + 1; filePosition < contentLength; i++)
                {
                    Console.WriteLine("Uploading part index: " + i);
                    UploadPartRequest uploadRequest = new UploadPartRequest
                    {
                        BucketName   = bucketName,
                        Key          = uploadToApi.Key,
                        UploadId     = uploadId,
                        PartNumber   = i,
                        PartSize     = partSize,
                        FilePosition = filePosition,
                        FilePath     = filePath
                    };
                    // Track upload progress.
                    uploadRequest.StreamTransferProgress +=
                        new EventHandler <StreamTransferProgressArgs>(UploadPartProgressEventCallback);
                    // Upload a part and add the response to our list.
                    var res = await s3Client.UploadPartAsync(uploadRequest);

                    filePosition += partSize;
                }
                // Setup to complete the upload.
                listParts = await s3Client.ListPartsAsync(listPartsRequest);

                List <PartETag> t = new List <PartETag>();
                foreach (var p in listParts.Parts)
                {
                    t.Add(new PartETag
                    {
                        ETag       = p.ETag,
                        PartNumber = p.PartNumber
                    });
                }
                CompleteMultipartUploadRequest completeRequest = new CompleteMultipartUploadRequest
                {
                    BucketName = bucketName,
                    Key        = uploadToApi.Key,
                    UploadId   = uploadId
                };
                completeRequest.AddPartETags(t);

                // Complete the upload.
                CompleteMultipartUploadResponse completeUploadResponse =
                    await s3Client.CompleteMultipartUploadAsync(completeRequest);

                uploadToApi.Status = UploadType.Uploaded;
                var updated = await ffApi.UpdateUpload(uploadToApi, uploadId);
            }
            catch (Exception x)
            {
                Log.Error(x.ToString());
            }
        }