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 })); }
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()); }