Created
August 19, 2021 08:39
-
-
Save ivakhnov/e3d76196c91c23a41ff4975904f38b8b to your computer and use it in GitHub Desktop.
[UploadApiService]
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| using Microsoft.WindowsAzure.Storage.Blob; | |
| using Newtonsoft.Json; | |
| using Newtonsoft.Json.Linq; | |
| using System; | |
| using System.Collections.Generic; | |
| using System.IO; | |
| using System.Net.Http; | |
| using System.Threading.Tasks; | |
| using PNG.ContentHub.GifConversion.Utils; | |
| using PNG.ContentHub.GifConversion.Helpers; | |
| using Microsoft.Extensions.Logging; | |
| namespace PNG.ContentHub.GifConversion.Services | |
| { | |
| internal class UploadApiService | |
| { | |
| private const string RequestUploadUrl = "api/v1.0/upload"; | |
| private const string UploadAlternativeFileUrl = "api/v1.0/upload/assets/{0}/alternative"; | |
| private const string GifContentType = "image/gif"; | |
| private readonly ILogger _logger; | |
| private string _fileSize; | |
| private string _fileName; | |
| private byte[] _fileAsByteArray; | |
| public UploadApiService(Uri gifUrl, string fileName, ILogger logger) | |
| { | |
| _fileName = fileName; | |
| _fileAsByteArray = gifUrl.ToByteArray(); | |
| _fileSize = _fileAsByteArray.Length.ToString(); | |
| _logger = logger; | |
| } | |
| internal async Task SetAlternativeFileToAsset(long entityId) | |
| { | |
| var client = MConnector.Client.Raw; | |
| //First step | |
| try | |
| { | |
| HttpResponseMessage uploadUrlResponse; | |
| uploadUrlResponse = await client.SendAsync(GetUploadUrlRequestMessage); | |
| _logger.LogTrace($"Upload Url request has been sent"); | |
| uploadUrlResponse.EnsureSuccessStatusCode(); | |
| var uploadUrlResponseBody = JObject.Parse(await uploadUrlResponse.Content.ReadAsStringAsync()); | |
| //Retrieving direct url for Azure BlockBlob location | |
| var uploadUrl = uploadUrlResponse.Headers.Location; | |
| _logger.LogDebug($"Upload Url response body is: {uploadUrlResponseBody}"); | |
| _logger.LogTrace($"Upload Url is: {uploadUrl}"); | |
| //Second step is to upload Gif url into Azure | |
| var cloudBlockBlob = new CloudBlockBlob(uploadUrl); | |
| cloudBlockBlob.Properties.ContentType = GifContentType; | |
| cloudBlockBlob.Metadata.Add("Filename", _fileName); | |
| await cloudBlockBlob.UploadFromStreamAsync(new MemoryStream(_fileAsByteArray)); | |
| _logger.LogDebug($"'{_fileName}' file has been uploaded to Azure Blob Storage: {uploadUrlResponseBody}"); | |
| //Third step is to update alternative file | |
| var json = JsonConvert.SerializeObject(uploadUrlResponseBody); | |
| var httpContent = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); | |
| var alternativeFileUrlWithId = string.Format(UploadAlternativeFileUrl, entityId); | |
| var uploadAlternativeFileResponse = await client.PostAsync($"{AppSettings.Host}{alternativeFileUrlWithId}", httpContent); | |
| uploadAlternativeFileResponse.EnsureSuccessStatusCode(); | |
| var uploadAlternativeFileResponseBody = JObject.Parse(await uploadAlternativeFileResponse.Content.ReadAsStringAsync()); | |
| _logger.LogDebug($"Upload alternative file request has been sent. Response status is: {uploadAlternativeFileResponse.StatusCode}"); | |
| _logger.LogInformation($"Upload alternative file is finished.\nResponse is: {uploadAlternativeFileResponseBody}"); | |
| } | |
| catch (Exception e) | |
| { | |
| _logger.LogError($"Error during alternative file update. Exception: {e.Message}"); | |
| _logger.LogError($"{e.StackTrace}"); | |
| } | |
| } | |
| private HttpRequestMessage GetUploadUrlRequestMessage() | |
| { | |
| var uploadUrlRequest = new HttpRequestMessage(HttpMethod.Post, $"{AppSettings.Host}{RequestUploadUrl}"); | |
| uploadUrlRequest.Content = new FormUrlEncodedContent(new Dictionary<string, string> | |
| { | |
| { "fileName", _fileName }, | |
| { "fileSize", _fileSize } | |
| }); | |
| return uploadUrlRequest; | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment