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); }