public ActionResult Create([Bind(Include = "ID,Forename,Surname,JobTitle,EmployeeNumber,File")] Employee employee, HttpPostedFileBase file)
        {
            if (ModelState.IsValid)
            {
                if (file != null)
                {
                    byte[] thePictureAsBytes = new byte[file.ContentLength];
                    using (BinaryReader theReader = new BinaryReader(file.InputStream))
                    {
                        thePictureAsBytes = theReader.ReadBytes(file.ContentLength);
                    }


                    // Convert photo to base64
                    string tempPhoto = Convert.ToBase64String(thePictureAsBytes);

                    // Send thePictureAsBytes to Google Vision API
                    bool imageValidated = ImageValidationHelper.ValidateImage(tempPhoto);

                    // Check if photo meets standard
                    if (imageValidated)
                    {
                        // add photo to employee
                        employee.Photo = tempPhoto;
                    }
                }


                db.Employees.Add(employee);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(employee));
        }
示例#2
0
        public async Task <IActionResult> UpdateAvatar([FromForm] AvatarModel model)
        {
            string fileName    = "";
            string filePath    = "";
            string newFileName = "";

            try
            {
                fileName = model.Image.GetFileName();

                var extension = Path.GetExtension(fileName);

                #region Validations

                // check for invalid characters
                if (fileName.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0)
                {
                    return(BadRequest());
                }

                // file name should not exceed 255 characters
                if (fileName.Length > 255)
                {
                    return(BadRequest());
                }

                // check for valid extensions
                if (!Constants.AcceptedExtensions.Any(e => e == extension.ToUpper()))
                {
                    return(BadRequest());
                }

                // check image header bytes
                using (var sourceStream = model.Image.OpenReadStream())
                {
                    if (!ImageValidationHelper.ValidateImageHeaders(sourceStream))
                    {
                        return(BadRequest());
                    }
                }
                #endregion

                newFileName = Guid.NewGuid().ToString() + extension;
                filePath    = Path.Combine(_dynamicConfig.CacheFolder, Constants.AvatarFolder, newFileName);

                _fileUploadService.CreateDirectory(filePath);
                await _fileUploadService.CopyFile(model.Image, filePath, FileMode.Create);

                var user = await _accountService.GetUser(User.Identity.Name);

                user.AvatarImage = newFileName;
                await _accountService.SaveUser(user);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"Failed to save avatar profile image: {fileName}");
                throw;
            }

            return(Ok(new { avatarImage = newFileName }));
        }
示例#3
0
        public async Task <IActionResult> ImageUpload(IFormCollection formdata)
        {
            var acceptedExtensions = new string[] { "JPG", "JPEG", "PNG", "GIF" };

            var files = HttpContext.Request.Form.Files;
            var tags  = new List <string>();

            if (formdata.ContainsKey("tagList") && formdata["tagList"].ToString().Length > 0)
            {
                tags = formdata["tagList"].ToString().Split(',').ToList();
            }

            foreach (var file in files)
            {
                string fileName = "";
                string filePath = "";

                try
                {
                    fileName = file.GetFileName();

                    var extension = Path.GetExtension(fileName);
                    var tempDir   = Path.GetTempPath();

                    #region Validations

                    // check for invalid characters
                    if (fileName.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0)
                    {
                        return(BadRequest());
                    }

                    // file name should not exceed 255 characters
                    if (fileName.Length > 255)
                    {
                        return(BadRequest());
                    }

                    // check for valid extensions
                    if (!Constants.AcceptedExtensions.Any(e => e == extension.ToUpper()))
                    {
                        return(BadRequest());
                    }

                    // check image header bytes
                    using (var sourceStream = file.OpenReadStream())
                    {
                        if (!ImageValidationHelper.ValidateImageHeaders(sourceStream))
                        {
                            return(BadRequest());
                        }
                    }
                    #endregion

                    filePath = Path.Combine(tempDir, fileName);
                    await _fileUploadService.CopyFile(file, filePath, FileMode.Create);

                    var user = User.Identity.Name;
                    tags.Add($"{user} Upload");

                    var cachePath = await _imageService.QueueMobileResize(user, filePath, tags.ToArray());

                    LogUpload(User.Identity.Name);

                    _uploadTracker.AddUpload(User.Identity.Name, filePath);
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, $"Failed to receive uploaded file: {fileName}");
                    throw;
                }
            }

            return(Ok());
        }