public async Task<HttpResponseMessage> UploadFileAsync(AttachmentData attachmentData, CancellationToken token, IProgress<double> progress)
        {
            int bufferSize = ResolveBufferSize(attachmentData.Stream.Length);

            using (var client = new HttpClient())
            using (var content = new MultipartFormDataContent())
            using (var stream = progress == null ? new ReportableStream(attachmentData.Stream) : new ReportableStream(attachmentData.Stream, progress))
            using (var streamContent = new StreamContent(stream, bufferSize))
            {
                content.Add(streamContent);

                streamContent.Headers.ContentType = new MediaTypeHeaderValue(attachmentData.ContentType);
                var disposition = CreateContentDispositionHeader(attachmentData.FileName);

                streamContent.Headers.ContentDisposition = disposition;

                client.DefaultRequestHeaders.UserAgent.ParseAdd(Settings.UserAgent);
                string uriString = string.Format(QueryString, Settings.Host, Settings.SessionId);

                var uri = new Uri(uriString);

                return await client.PostAsync(uri, content, token).ConfigureAwait(false);
            }
        }
 private async TPL.Task<FileHandle> UplaodAttachmentAsync(FileAttachment fileAttachment)
 {
     using (var stream = new MemoryStream())
     {
         //Load the attachment into a file.
         //This call results in a GetAttachment call to EWS.
         fileAttachment.Load(stream);
         stream.Seek(0, SeekOrigin.Begin);
         var attachmentData = new AttachmentData
         {
             Id = fileAttachment.Id,
             Stream = stream,
             FileName = fileAttachment.FileName ?? fileAttachment.Name,
             ContentType = fileAttachment.ContentType
         };
         var uploadFileAsync = await FileUploadService.UploadFileAsync(attachmentData);
         var handle = await GetHandleFromResponse(uploadFileAsync);
         return new FileHandle { Handle = handle, FileName = attachmentData.FileName };
     }
 }
        private async TPL.Task<FileHandle> UploadEmlAsync(ExchangeService service, ItemId itemId)
        {
            using (var memoryStream = GetMimeContent(service, itemId))
            {
                var attachmentData = new AttachmentData
                {
                    Id = Guid.Empty.ToString("D"),
                    Stream = memoryStream,
                    FileName = "current.eml",
                    ContentType = "message/rfc822"
                };

                var uploadFileAsync = await FileUploadService.UploadFileAsync(attachmentData);
                var handle = await GetHandleFromResponse(uploadFileAsync);
                return new FileHandle { Handle = handle, FileName = attachmentData.FileName };
            }
        }
 public Task<HttpResponseMessage> UploadFileAsync(AttachmentData attachmentData)
 {
     return UploadFileAsync(attachmentData, CancellationToken.None);
 }