示例#1
0
        private async Task <ChunkedUploadResponse> UploadChunk(Stream stream, ChunkedUploadResponse lastResponse, CancellationToken cancellationToken)
        {
            if (lastResponse == null)
            {
                throw new ArgumentNullException("lastResponse");
            }

            var offset   = lastResponse.Offset;
            var uploadId = lastResponse.UploadId;

            var request = MakeChunkedUploadPutRequest(offset, uploadId);

            var buffer = new byte[ChunkSize];

            stream.Seek(lastResponse.Offset, SeekOrigin.Begin);
            var contentSize = stream.Read(buffer, 0, ChunkSize);

            if (contentSize == 0)
            {
                // Nothing left to send
                return(null);
            }

            HttpContent content = new ByteArrayContent(buffer, 0, contentSize);

            try
            {
                var response = await _httpClient.PutAsync(request.RequestUri, content, cancellationToken);

                if (response.StatusCode != HttpStatusCode.OK)
                {
                    throw new DropboxException(response);
                }

                var body = await response.Content.ReadAsStringAsync();

                return(JsonConvert.DeserializeObject <ChunkedUploadResponse>(body));
            }
            catch (AggregateException)
            {
                throw;
            }
            catch (DropboxException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new DropboxException(ex);
            }
        }
示例#2
0
 private async Task <ChunkedUploadResponse> UploadChunk(Stream stream, ChunkedUploadResponse lastResponse, CancellationToken cancellationToken)
 {
     return(await UploadChunk(stream, ChunkSize, lastResponse, cancellationToken));
 }