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); } }
private async Task <ChunkedUploadResponse> UploadChunk(Stream stream, ChunkedUploadResponse lastResponse, CancellationToken cancellationToken) { return(await UploadChunk(stream, ChunkSize, lastResponse, cancellationToken)); }