using System; using System.ComponentModel.DataAnnotations; using System.IO; using System.Threading.Tasks; using BlazorInputFile; namespace BlazorShared.Models { public class CatalogItem { public int Id { get; set; } public int CatalogTypeId { get; set; } public string CatalogType { get; set; } = "NotSet"; public int CatalogBrandId { get; set; } public string CatalogBrand { get; set; } = "NotSet"; [Required(ErrorMessage = "The Name field is required")] public string Name { get; set; } [Required(ErrorMessage = "The Description field is required")] public string Description { get; set; } // decimal(18,2) [RegularExpression(@"^\d+(\.\d{0,2})*$", ErrorMessage = "The field Price must be a positive number with maximum two decimals.")] [Range(0.01, 1000)] [DataType(DataType.Currency)] public decimal Price { get; set; } public string PictureUri { get; set; } public string PictureBase64 { get; set; } public string PictureName { get; set; } private const int ImageMaximumBytes = 512000; public static string IsValidImage(string pictureName, string pictureBase64) { if (string.IsNullOrEmpty(pictureBase64)) { return "File not found!"; } var fileData = Convert.FromBase64String(pictureBase64); if (fileData.Length <= 0) { return "File length is 0!"; } if (fileData.Length > ImageMaximumBytes) { return "Maximum length is 512KB"; } if (!IsExtensionValid(pictureName)) { return "File is not image"; } return null; } public static async Task<string> DataToBase64(IFileListEntry fileItem) { using ( var reader = new StreamReader(fileItem.Data)) { using (var memStream = new MemoryStream()) { await reader.BaseStream.CopyToAsync(memStream); var fileData = memStream.ToArray(); var encodedBase64 = Convert.ToBase64String(fileData); return encodedBase64; } } } private static bool IsExtensionValid(string fileName) { var extension = Path.GetExtension(fileName); return string.Equals(extension, ".jpg", StringComparison.OrdinalIgnoreCase) || string.Equals(extension, ".png", StringComparison.OrdinalIgnoreCase) || string.Equals(extension, ".gif", StringComparison.OrdinalIgnoreCase) || string.Equals(extension, ".jpeg", StringComparison.OrdinalIgnoreCase); } } }