public async Task <Item> UploadFileAsync(string folderPath, string fileName, Stream fileStream, bool?overwrite, IProgress <StreamProgress> progress, string expand = null, string select = null, CancellationToken cancellationToken = default(CancellationToken)) { var uri = BuildApiUri(folderPath + "/children", expand); var client = CreateClient(); var content = new MultipartContent("related"); var item = new Item(); item.Name = fileName; item.File = new FileFacet(); item.SourceUrl = "cid:content"; item.ConflictBehavior = overwrite.HasValue ? overwrite.Value ? ConflictBehavior.Replace : ConflictBehavior.Rename : ConflictBehavior.Fail; var text = item.SerializeJson(); var textContent = new StringContent(text); textContent.Headers.Add("Content-ID", "<metadata>"); textContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); content.Add(textContent); var fileContent2 = new StreamedContent(fileStream, progress, cancellationToken); fileContent2.Headers.Add("Content-ID", "<content>"); content.Add(fileContent2); var response = await client.PostAsync(uri, content, cancellationToken);//.AsTask(cancellationToken, progress); if (response.IsSuccessStatusCode) { return(await response.Content.ReadJsonAsync <Item>()); } else { throw await ProcessException(response.Content); } }
public async Task <File> UploadMultipartFileAsync(File file, Stream fileStream, IProgress <StreamProgress> progress, string fields, CancellationToken cancellationToken) { var uri = BuildUri(ApiServiceUploadUri + "files", fields: fields, uploadType: "multipart"); var client = GetClient(); var text = file.SerializeJson <File>(); var content = new MultipartContent("related"); var textContent = new StringContent(text); textContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); content.Add(textContent); var fileContent2 = new StreamedContent(fileStream, progress, cancellationToken); fileContent2.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") { Name = "file", FileName = file.Name }; content.Add(fileContent2); var response = await client.PostAsync(uri, content, cancellationToken); if (response.IsSuccessStatusCode) { return(await response.Content.ReadJsonAsync <File>()); } else { throw await ProcessException(response); } }
public async Task <Item> UploadSessionFinishAsync(string sessionId, string path, Stream fileStream, long offset, IProgress <StreamProgress> progress, bool autorename = false, CancellationToken cancellationToken = default(CancellationToken)) { var @params = new UploadSessionParams(); @params.Cursor = new UploadSessionCursor() { SessionId = sessionId, Offset = offset }; @params.Commit = new UploadParams() { Path = path, Autorename = autorename, Mode = "add", }; var uri = BuildApiContentUri("files/upload_session/finish"); var client = GetClient(); var request = new HttpRequestMessage(HttpMethod.Post, uri); var content = new StreamedContent(fileStream, progress, cancellationToken); client.DefaultRequestHeaders.Add("Dropbox-API-Arg", @params.SerializeJson(true)); content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); request.Content = content; var response = await client.SendAsync(request, cancellationToken); if (response.IsSuccessStatusCode) { return(await response.Content.ReadJsonAsync <Item>()); } else { throw await ProcessException(response); } }
public async Task <string> UploadResumableFileAsync(Uri sessionUri, Stream fileStream, IProgress <StreamProgress> progress, CancellationToken cancellationToken) { var client = CreateClient(); client.DefaultRequestHeaders.Add("X-Goog-Upload-Command", "upload, finalize"); client.DefaultRequestHeaders.Add("X-Goog-Upload-Offset", "0"); var content = new StreamedContent(fileStream, progress, cancellationToken); var response = await client.PutAsync(sessionUri, content, cancellationToken); return(await response.Content.ReadAsStringAsync()); }
public async Task <Tuple <File, ContentRangeHeaderValue> > SendResumableFileAsync(Uri sessionUri, string contentType, StreamPartition fileStream, long from, long to, long length, IProgress <StreamProgress> progress, CancellationToken cancellationToken) { var client = GetClient(); var content = new StreamedContent(fileStream, progress, cancellationToken); content.Headers.ContentType = new MediaTypeHeaderValue(contentType); if (from > 0 || to < length - 1) { content.Headers.ContentRange = new ContentRangeHeaderValue(from, to, length); } var response = await client.PutAsync(sessionUri, content, cancellationToken); return(await ProcessResumableUploadResponse(response)); }
private async Task <string> PostRaw(Uri uri, Stream buffer, IProgress <StreamProgress> progress, CancellationToken cancellationToken) { var client = CreateClient(); var content = new StreamedContent(buffer, progress, cancellationToken); //client.DefaultRequestHeaders.UserAgent.ParseAdd("MegaApiClient v1.0");//.Add(new HttpProductInfoHeaderValue("MegaApiClient v1.0")); //client.DefaultRequestHeaders.Expect.Add(new HttpExpectationHeaderValue("100-continue")); //client.DefaultRequestHeaders.Connection.Clear(); //client.DefaultRequestHeaders.AcceptEncoding.Clear(); content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); //content.Headers.ContentEncoding.Add(new HttpContentCodingHeaderValue("base64")); var response = await client.PostAsync(uri, content, cancellationToken);//.AsTask(cancellationToken, progress); return(await response.Content.ReadAsStringAsync()); }
/// <summary> /// Uploads a new file to the specified <paramref name="filePath"/>. /// </summary> /// <param name="filePath">The file identifier.</param> /// <param name="contentType">MimeType of the file. This parameter can be null.</param> /// <param name="fileStream">The file stream.</param> /// <param name="progress">The progress of the file upload will be notified to this <see cref="IProgress{T}"/>.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns></returns> public async Task UploadFileAsync(string filePath, string contentType, Stream fileStream, IProgress <StreamProgress> progress, CancellationToken cancellationToken) { var uri = BuildApiUri(filePath); var client = CreateClient(); var content = new StreamedContent(fileStream, progress, cancellationToken); if (!string.IsNullOrWhiteSpace(contentType)) { content.Headers.ContentType = new MediaTypeHeaderValue(contentType); } var response = await client.PutAsync(uri, content, cancellationToken); if (!response.IsSuccessStatusCode) { throw await ProcessException(response); } }
public async Task <Video> UploadVideo(string contentType, Stream fileStream, string url, IProgress <StreamProgress> progress, CancellationToken cancellationToken) { var client = CreateHttpClient(); var content = new StreamedContent(fileStream, progress, cancellationToken); content.Headers.ContentType = new MediaTypeHeaderValue(contentType); var response = await client.PostAsync(new Uri(url), content, cancellationToken);//.AsTask(cancellationToken, progress); if (response.IsSuccessStatusCode) { return(await response.Content.ReadJsonAsync <Video>()); } else { throw await ProcessException(response.Content); } }
public async Task UploadSessionAppendAsync(string sessionId, Stream fileStream, long offset, IProgress <StreamProgress> progress, CancellationToken cancellationToken = default(CancellationToken)) { var @params = new UploadSessionParams(); @params.Close = false; @params.Cursor = new UploadSessionCursor() { SessionId = sessionId, Offset = offset }; var uri = BuildApiContentUri("files/upload_session/append_v2"); var client = GetClient(); var request = new HttpRequestMessage(HttpMethod.Post, uri); var content = new StreamedContent(fileStream, progress, cancellationToken); client.DefaultRequestHeaders.Add("Dropbox-API-Arg", @params.SerializeJson(true)); content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); request.Content = content; var response = await client.SendAsync(request, cancellationToken); if (!response.IsSuccessStatusCode) { throw await ProcessException(response); } }
public async Task <UploadSessionResult> UploadSessionStartAsync(Stream fileStream, IProgress <StreamProgress> progress, CancellationToken cancellationToken = default(CancellationToken)) { var @params = new UploadSessionParams(); @params.Close = false; var uri = BuildApiContentUri("files/upload_session/start"); var client = GetClient(); var request = new HttpRequestMessage(HttpMethod.Post, uri); var content = new StreamedContent(fileStream, progress, cancellationToken); client.DefaultRequestHeaders.Add("Dropbox-API-Arg", @params.SerializeJson(true)); content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); request.Content = content; var response = await client.SendAsync(request, cancellationToken); if (response.IsSuccessStatusCode) { return(await response.Content.ReadJsonAsync <UploadSessionResult>()); } else { throw await ProcessException(response); } }