protected override async Task <UploadResponse> InternalUploadAsync()
        {
            int       tryCount      = 0;
            Exception lastException = null;

            Stream stream = null;

            try
            {
                stream = File.OpenRead();
                while (tryCount < 3)
                {
                    try
                    {
                        var httpClient = GetHttpClient();

                        using (var requestMessage = new HttpRequestMessage(
                                   HttpMethod.Post,
                                   GetChunkUriForStandardUploads()))
                        {
                            using (var multipartFormContent = new MultipartFormDataContent("upload-" + Guid.NewGuid().ToString("N")))
                            {
                                BaseRequestProvider.TryAddCookies(Client, requestMessage);

                                var streamContent = new StreamContentWithProgress(stream, OnProgress);
                                streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
                                multipartFormContent.Add(streamContent, "File1", File.Name);
                                requestMessage.Content = multipartFormContent;

                                var responseMessage =
                                    await
                                    httpClient.SendAsync(
                                        requestMessage,
                                        CancellationToken.GetValueOrDefault(System.Threading.CancellationToken.None));

                                MarkProgressComplete();

                                return(await GetUploadResponseAsync(responseMessage));
                            }
                        }
                    }
                    catch (Exception exception)
                    {
                        lastException = exception;
                        stream.Seek(0, SeekOrigin.Begin);
                        tryCount++;
                    }
                }
            }
            finally
            {
                if (stream != null)
                {
                    stream.Dispose();
                }
            }


            throw new ApplicationException("Upload failed after 3 tries", lastException);
        }
Ejemplo n.º 2
0
        private async Task ExecuteChunkUploadMessage(HttpRequestMessage requestMessage)
        {
            await TryPauseAsync(CancellationToken);

            BaseRequestProvider.TryAddCookies(Client, requestMessage);

            using (var responseMessage = await GetHttpClient().SendAsync(requestMessage, CancellationToken.GetValueOrDefault(System.Threading.CancellationToken.None)))
            {
                string response = await responseMessage.Content.ReadAsStringAsync();

                try
                {
                    var sfResponse = JsonConvert.DeserializeObject <ShareFileApiResponse <string> >(response);
                    if (sfResponse.Error)
                    {
                        throw new UploadException(sfResponse.ErrorMessage, sfResponse.ErrorCode);
                    }
                }
                catch (JsonSerializationException jEx)
                {
                    if (responseMessage.Content != null)
                    {
                        TryProcessFailedUploadResponse(response);
                    }

                    throw new UploadException("StorageCenter error: " + response, -1, jEx);
                }
            }
        }
Ejemplo n.º 3
0
        private void ExecuteChunkUploadMessage(HttpRequestMessage requestMessage)
        {
            TryPause();

            BaseRequestProvider.TryAddCookies(Client, requestMessage);

            using (var responseMessage = GetHttpClient().SendAsync(requestMessage).WaitForTask())
            {
                DeserializeShareFileApiResponse <string>(responseMessage);
                //no exception = success?
            }
        }
Ejemplo n.º 4
0
        private async Task <UploadResponse> FinishUploadAsync()
        {
            this.MarkProgressComplete();

            var client         = GetHttpClient();
            var finishUri      = this.GetFinishUriForThreadedUploads();
            var requestMessage = new HttpRequestMessage(HttpMethod.Get, finishUri);

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

            var response = await client.SendAsync(requestMessage);

            return(await GetUploadResponseAsync(response));
        }
Ejemplo n.º 5
0
        private UploadResponse FinishUpload()
        {
            MarkProgressComplete();

            var finishUri = GetFinishUriForThreadedUploads();
            var client    = GetHttpClient();

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

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

            var response = client.SendAsync(requestMessage).WaitForTask();

            return(GetUploadResponse(response));
        }