public async Task <LocalFileModel> SaveAsync(ImageModel image) { //ImageInfo result = new ImageInfo(); var result = new LocalFileModel(); var baseUrl = image.GetBaseUrl(); var now = DateTimeOffset.UtcNow; var destinationDirectory = appOptions.DestinationPath; if (!Directory.Exists(destinationDirectory)) { Directory.CreateDirectory(destinationDirectory); } result.Directory = destinationDirectory; var suffixes = new string[] { "_UHD", "_1920x1080" }; foreach (var suffix in suffixes) { var imageInfo = image.GetFileName(suffix); var imageUrl = $"{baseUrl}{imageInfo.BaseUrl}"; var response = await client.GetAsync(imageUrl); if (response.IsSuccessStatusCode && response.Content != null) { if (response.Content.Headers.Contains("content-type")) { var contentType = response.Content.Headers.GetValues("content-type").FirstOrDefault(); result.ContentType = contentType; } else { result.ContentType = "application/octet-stream"; } var fileName = imageInfo.FileName; if (String.IsNullOrEmpty(fileName)) { throw new ArgumentException("Does not find a file name"); } result.FileName = fileName; var fileNameWithoutExtension = fileName; var fileExtension = String.Empty; if (fileName.Contains(".")) { var fileNamesToken = fileName.Split('.'); fileNameWithoutExtension = String.Join(".", fileNamesToken.Take(fileNamesToken.Length - 1)); fileExtension = $".{ fileName.Split('.').LastOrDefault() }"; } var saveFileName = $"{fileNameWithoutExtension}-{now.Ticks}{fileExtension}"; var filePath = Path.Combine(destinationDirectory, saveFileName); result.FilePath = filePath; using (var responseStream = await response.Content.ReadAsStreamAsync()) { result.Size = responseStream.Length; responseStream.Position = 0; using (var fileStream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write)) { await responseStream.CopyToAsync(fileStream); await fileStream.FlushAsync(); fileStream.Close(); } responseStream.Close(); } await imageFileService.GenerateThumbnailAsync(filePath); break; } } return(result); }
public async Task <ImageInfo> Save(ImageModel image) { ImageInfo result = new ImageInfo(); var baseUrl = image.GetBaseUrl(); var imageUrl = $"{baseUrl}{image.Url}"; var destinationDirectory = appOptions.DestinationPath; if (!Directory.Exists(destinationDirectory)) { Directory.CreateDirectory(destinationDirectory); } var response = await client.GetAsync(imageUrl); if (response.IsSuccessStatusCode && response.Content != null) { if (response.Content.Headers.Contains("content-type")) { var contentType = response.Content.Headers.GetValues("content-type").FirstOrDefault(); result.ContentType = contentType; } var fileName = image.GetFileName(); if (String.IsNullOrEmpty(fileName)) { throw new ArgumentException("Does not find a file name"); } var fileNameWithoutExtension = fileName; var fileExtension = String.Empty; if (fileName.Contains(".")) { var fileNamesToken = fileName.Split('.'); fileNameWithoutExtension = String.Join(".", fileNamesToken.Take(fileNamesToken.Length - 1)); fileExtension = $".{ fileName.Split('.').LastOrDefault() }"; } var saveFileName = $"{fileNameWithoutExtension}-{DateTimeOffset.UtcNow.Ticks}{fileExtension}"; var filePath = Path.Combine(destinationDirectory, saveFileName); using (var responseStream = await response.Content.ReadAsStreamAsync()) { result.FileSize = responseStream.Length; responseStream.Position = 0; using (var fileStream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write)) { await responseStream.CopyToAsync(fileStream); await fileStream.FlushAsync(); fileStream.Close(); } responseStream.Close(); } result.BaseUrl = image.GetBaseUrl(); result.Url = image.Url; result.FilePath = filePath; result.FileName = fileName; result.Directory = destinationDirectory; result.Hash = image.Hsh; result.CreatedAt = DateTimeOffset.UtcNow; } return(result); }