/// <summary> /// Uploads a large file in chunked parts. /// </summary> /// <param name="request">The <see cref="UploadFileRequest"/> content to send.</param> /// <param name="progress">A progress action which fires every time the write buffer is cycled.</param> /// <param name="cancellationToken">The cancellation token to cancel operation.</param> private async Task <IApiResults <UploadFileResponse> > UploadLargeFileAsync (UploadLargeFileRequest request, IProgress <ICopyProgress> progress, CancellationToken cancellationToken) { if (request.ContentLength < ClientOptions.MinimumPartSize) { throw new ArgumentOutOfRangeException($"Argument must be a minimum of {ClientOptions.MinimumPartSize} bytes long.", nameof(request.ContentLength)); } List <string> sha1Hash = new List <string>(); var parts = GetStreamParts(request.ContentStream, Options.UploadPartSize); if (parts.Count == 0) { throw new ApiException($"The number of large file parts could not be determined from stream."); } var fileRequest = new StartLargeFileRequest(request.BucketId, request.FileName) { ContentType = request.ContentType, FileInfo = request.FileInfo }; fileRequest.FileInfo.SetLargeFileSha1(request.ContentStream.ToSha1()); var fileResults = await StartLargeFileAsync(fileRequest, cancellationToken).ConfigureAwait(false); if (fileResults.IsSuccessStatusCode) { var urlRequest = new GetUploadPartUrlRequest(fileResults.Response.FileId); var urlResults = await GetUploadPartUrlAsync(urlRequest, default, cancellationToken).ConfigureAwait(false);
public override BackblazeB2ActionResult <StartLargeFileResponse> Execute() { StartLargeFileRequest request = new StartLargeFileRequest { BucketID = _bucketID, ContentType = "b2/x-auto", FileName = _remoteFilePath, }; byte[] jsonBodyBytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(request)); HttpWebRequest webRequest = GetHttpWebRequest(_authorizationSession.APIURL + StartLargeFileURL); webRequest.Method = "POST"; webRequest.Headers.Add("Authorization", _authorizationSession.AuthorizationToken); webRequest.ContentLength = jsonBodyBytes.Length; return(SendWebRequestAndDeserialize(webRequest, jsonBodyBytes)); }
/// <summary> /// Prepares for uploading parts of a large file. /// </summary> /// <param name="request">The <see cref="StartLargeFileRequest"/> to send.</param> /// <exception cref="AuthenticationException">Thrown when authentication fails.</exception> /// <exception cref="ApiException">Thrown when an error occurs during client operation.</exception> async Task <IApiResults <StartLargeFileResponse> > IStorageParts.StartLargeFileAsync(StartLargeFileRequest request) { return(await _client.StartLargeFileAsync(request, _cancellationToken)); }
/// <summary> /// Prepares for uploading parts of a large file. /// </summary> /// <param name="bucketId">The bucket id the file will go in.</param> /// <param name="fileName">The name of the large file.</param> /// <exception cref="AuthenticationException">Thrown when authentication fails.</exception> /// <exception cref="ApiException">Thrown when an error occurs during client operation.</exception> async Task <IApiResults <StartLargeFileResponse> > IStorageParts.StartLargeFileAsync(string bucketId, string fileName) { var request = new StartLargeFileRequest(bucketId, fileName); return(await _client.StartLargeFileAsync(request, _cancellationToken)); }