Esempio n. 1
0
        /// <summary>
        /// Uploads the source stream to BunnyCDN.
        /// </summary>
        /// <param name="source">The stream containing the data to upload.</param>
        /// <param name="directory">The directory in BunnyCDN to upload to.</param>
        /// <param name="fileName">The name of the file to create in BunnyCDN.</param>
        /// <returns>An HTTP URI pointing to the new file in BunnyCDN.</returns>
        private async Task <Uri> UploadMedia(Stream source, string directory, string fileName)
        {
            var url = $"{settings.Value.StorageZone}/{directory}/{fileName}";

            using var sourceStreamContent = new StreamContent(source);
            HttpResponseMessage?uploadResponseOrNull = null;

            try
            {
                uploadResponseOrNull = await httpClient.PutAsync(url, sourceStreamContent);

                uploadResponseOrNull.EnsureSuccessStatusCode();
            }
            catch (HttpRequestException uploadError)
            {
                uploadError.Data.Add("directory", directory);
                uploadError.Data.Add("fileName", fileName);
                uploadError.Data.Add("url", url);
                if (uploadResponseOrNull != null)
                {
                    uploadError.Data.Add("statusCode", uploadResponseOrNull.StatusCode);
                    uploadError.Data.Add("reasonPhrase", uploadResponseOrNull.ReasonPhrase);
                }
                throw;
            }
            finally
            {
                uploadResponseOrNull?.Dispose();
            }

            return(HttpHost.Combine(directory, fileName));
        }