/// <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)); }