Example #1
0
        /// <summary>
        /// Uploads one file to B2, returning its unique file ID. Filename will be URL Encoded. If auto retry
        /// is set true it will retry a failed upload once after 1 second.
        /// </summary>
        /// <param name="fileData"></param>
        /// <param name="fileName"></param>
        /// <param name="uploadUrl"></param>
        /// <param name="bucketId"></param>
        /// <param name="autoRetry">Retry a failed upload one time after waiting for 1 second.</param>
        /// <param name="fileInfo"></param>
        /// <param name="cancelToken"></param>
        /// <returns></returns>
        public async Task <B2File> Upload(byte[] fileData, string fileName, B2UploadUrl uploadUrl, bool autoRetry, string bucketId = "", Dictionary <string, string> fileInfo = null, CancellationToken cancelToken = default(CancellationToken))
        {
            // Now we can upload the file
            var requestMessage = FileUploadRequestGenerators.Upload(_options, uploadUrl.UploadUrl, fileData, fileName, fileInfo);

            var response = await _client.SendAsync(requestMessage, cancelToken);

            // Auto retry
            if (autoRetry && (
                    response.StatusCode == (HttpStatusCode)429 ||
                    response.StatusCode == HttpStatusCode.RequestTimeout ||
                    response.StatusCode == HttpStatusCode.ServiceUnavailable))
            {
                Task.Delay(1000, cancelToken).Wait(cancelToken);
                response = await _client.SendAsync(requestMessage, cancelToken);
            }

            return(await ResponseParser.ParseResponse <B2File>(response, _api));
        }
Example #2
0
        /// <summary>
        /// DEPRECATED: This method has been deprecated in favor of the Upload that takes an UploadUrl parameter.
        /// The other Upload method is the preferred, and more efficient way, of uploading to B2.
        /// </summary>
        /// <param name="fileData"></param>
        /// <param name="fileName"></param>
        /// <param name="bucketId"></param>
        /// <param name="cancelToken"></param>
        /// <returns></returns>
        public async Task <B2File> Upload(byte[] fileData, string fileName, string bucketId = "", Dictionary <string, string> fileInfo = null, CancellationToken cancelToken = default(CancellationToken))
        {
            var operationalBucketId = Utilities.DetermineBucketId(_options, bucketId);

            // Get the upload url for this file
            var uploadUrlRequest  = FileUploadRequestGenerators.GetUploadUrl(_options, operationalBucketId);
            var uploadUrlResponse = _client.SendAsync(uploadUrlRequest, cancelToken).Result;
            var uploadUrlData     = await uploadUrlResponse.Content.ReadAsStringAsync();

            var uploadUrlObject = JsonConvert.DeserializeObject <B2UploadUrl>(uploadUrlData);

            // Set the upload auth token
            _options.UploadAuthorizationToken = uploadUrlObject.AuthorizationToken;

            // Now we can upload the file
            var requestMessage = FileUploadRequestGenerators.Upload(_options, uploadUrlObject.UploadUrl, fileData, fileName, fileInfo);
            var response       = await _client.SendAsync(requestMessage, cancelToken);

            return(await ResponseParser.ParseResponse <B2File>(response, _api));
        }