private byte[] ProcessImage(UploadImageModel model, string fileName)
        {
            using var fileStream = model.File.OpenReadStream();
            byte[] bytes = new byte[model.File.Length];
            fileStream.Read(bytes, 0, (int)model.File.Length);

            using (MemoryStream inStream = new MemoryStream(bytes))
            {
                var img         = Image.FromStream(inStream);
                var scaledImage = img.SetResizeResolution(model.Width, model.XDpi, model.YDpi);
                if (!string.IsNullOrEmpty(model.WatermarkText))
                {
                    scaledImage = scaledImage.SetWatermarkText(model.WatermarkText);
                }
                if (!string.IsNullOrEmpty(model.BackGroundColor))
                {
                    scaledImage = scaledImage.SetBackgroundColor(model.BackGroundColor);
                }

                var processedImage = Helper.ImageToByteArray(scaledImage, fileName);

                _cache.Set(model.ToString(), processedImage);

                WriteFile(processedImage, fileName);

                return(processedImage);
            }
        }
        public IActionResult Upload([FromForm] UploadImageModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(new { message = "Required parameters are missing" }));
            }

            if (!CheckIfImageFile(model.File))
            {
                return(BadRequest(new { message = "Invalid file extension" }));
            }
            var fileName = DateTime.Now.Ticks + model.Extension;

            var extension   = "." + model.File.FileName.Split('.')[model.File.FileName.Split('.').Length - 1];
            var contentType = Helper.GetFileContentType(extension);

            var data = _cache.Get(model.ToString());

            if (data == null)
            {
                var processedImage = ProcessImage(model, fileName);

                return(Ok(File(processedImage, contentType, fileName)));
            }

            return(Ok(File(data, contentType, fileName)));
        }