Example #1
0
        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);
            }
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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());
        }
Example #5
0
        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));
        }
Example #6
0
        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());
        }
Example #7
0
        /// <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);
            }
        }
Example #8
0
        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);
            }
        }
Example #9
0
        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);
            }
        }
Example #10
0
        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);
            }
        }