private async Task ExecuteChunkUploadMessage(HttpRequestMessage requestMessage, CancellationToken cancellationToken)
        {
            await TryPauseAsync(cancellationToken).ConfigureAwait(false);

            requestMessage.AddDefaultHeaders(Client);

            var client = GetHttpClient();

            using (
                var responseMessage =
                    await
                    RequestExecutor.SendAsync(
                        client,
                        requestMessage,
                        HttpCompletionOption.ResponseContentRead,
                        cancellationToken).ConfigureAwait(false))
            {
                if (Configuration.IsNetCore)
                {
                    progressReporter.ReportProgress(requestMessage.Content.Headers.ContentLength.GetValueOrDefault());
                }
                string responseContent = await responseMessage.Content.ReadAsStringAsync().ConfigureAwait(false);

                ValidateChunkResponse(responseMessage, responseContent);
            }
        }
        protected override UploadResponse InternalUpload(CancellationToken cancellationToken)
        {
            SetUploadSpecification();

            int tryCount = 0;

            while (true)
            {
                try
                {
                    TryPause();
                    if (cancellationToken.IsCancellationRequested)
                    {
                        throw new TaskCanceledException();
                    }

                    var httpClient = GetHttpClient();

                    using (var requestMessage = new HttpRequestMessage(
                               HttpMethod.Post,
                               GetChunkUriForStandardUploads()))
                    {
                        using (var streamContent = new StreamContentWithProgress(new NoDisposeStream(FileStream), progressReporter.ReportProgress, cancellationToken))
                        {
                            streamContent.TryPauseAction = TryPauseAsync;
                            requestMessage.AddDefaultHeaders(Client);
                            streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
                            requestMessage.Content            = streamContent;

                            if (!UploadSpecificationRequest.Raw)
                            {
                                var multiPartContent = new MultipartFormDataContent();
                                multiPartContent.Add(streamContent, "Filedata", UploadSpecificationRequest.FileName);
                                requestMessage.Content = multiPartContent;
                            }

                            var responseMessage =
                                httpClient.SendAsync(requestMessage, CancellationToken.None).WaitForTask();

                            return(GetUploadResponse(responseMessage));
                        }
                    }
                }
                catch (Exception ex)
                {
                    if (tryCount >= 3 || !FileStream.CanSeek || ex is TaskCanceledException)
                    {
                        throw;
                    }
                    else
                    {
                        tryCount += 1;
                        FileStream.Seek(0, SeekOrigin.Begin);
                    }
                }
            }
        }
        private async Task <HttpResponseMessage> SendHttpRequest(HttpRequestMessage requestMessage, CancellationToken cancellationToken)
        {
            var client = GetHttpClient();

            requestMessage.Headers.Add("Accept", "application/json");
            requestMessage.AddDefaultHeaders(Client);

            return(await RequestExecutor.SendAsync(
                       client,
                       requestMessage,
                       HttpCompletionOption.ResponseContentRead,
                       cancellationToken).ConfigureAwait(false));
        }
Beispiel #4
0
        private UploadResponse FinishUpload()
        {
            var finishUri = GetFinishUriForThreadedUploads();
            var client    = GetHttpClient();

            var requestMessage = new HttpRequestMessage(HttpMethod.Get, finishUri);

            requestMessage.Headers.Add("Accept", "application/json");
            requestMessage.AddDefaultHeaders(Client);

            var response = RequestExecutor.Send(client, requestMessage, HttpCompletionOption.ResponseContentRead);

            return(GetUploadResponse(response, HashProvider.GetComputedHashAsString()));
        }
        private async Task <UploadResponse> FinishUploadAsync()
        {
            var client         = GetHttpClient();
            var finishUri      = this.GetFinishUriForThreadedUploads();
            var requestMessage = new HttpRequestMessage(HttpMethod.Get, finishUri);

            requestMessage.Headers.Add("Accept", "application/json");
            requestMessage.AddDefaultHeaders(Client);

            var response = await RequestExecutor.SendAsync(
                client,
                requestMessage,
                HttpCompletionOption.ResponseContentRead,
                default(CancellationToken)).ConfigureAwait(false);

            return(await GetUploadResponseAsync(response, HashProvider.GetComputedHashAsString()).ConfigureAwait(false));
        }