public async Task <ImageDto> UploadFileAsync(IFormFile file) { var extension = Path.GetExtension(file.FileName); if (string.IsNullOrEmpty(extension) || !_imageOptions.AllowedFileExtensions.Contains(extension)) { throw new ImageStoreException($"'{extension}' extension is not allowed"); } var fileName = Guid.NewGuid().ToString(); var thumbnailName = fileName + ".png"; var filePath = Path.Combine(_imageOptions.RootPath, _imageOptions.FilesPath, fileName); var thumbnailPath = Path.Combine(_imageOptions.RootPath, _imageOptions.ThumbnailsPath, thumbnailName); using (var stream = new FileStream(filePath, FileMode.Create)) { await file.CopyToAsync(stream); } var thumbnailBytes = ParserService.ParseCaff(filePath); if (thumbnailBytes.Length == 0) { if (File.Exists(filePath)) { File.Delete(filePath); } throw new ImageStoreException("Corrupted .caff file"); } await File.WriteAllBytesAsync(thumbnailPath, thumbnailBytes); var image = new Dal.Entities.Image { FileName = fileName, OriginalFileName = file.FileName, Uploader = await _userManager.GetUserAsync(_user) }; _dbContext.Images.Add(image); await _dbContext.SaveChangesAsync(); return(new ImageDto { Id = image.Id, FileName = image.OriginalFileName, Url = $"/images/{image.FileName}", ThumbnailUrl = $"/thumbnails/{image.FileName}.png", Uploader = image.Uploader.UserName }); }