public async Task <IActionResult> Index(string userId) { var userInDb = await _context.Users.Where(x => x.Id == userId).FirstOrDefaultAsync(); if (userInDb == null) { return(NotFound("You have to be logged in.")); } if (userInDb.UserName != User.Identity.Name) { ModelState.AddModelError("", "Unauthorized, you have to login first."); return(RedirectToAction("Index", "Home")); } var byteImageFile = await _fileServiceAPI.GetUserProfileImage(userInDb.Id); var model = new ProfileImageFileModel { UserId = userInDb.Id }; if (byteImageFile != null) { model.HasLogo = byteImageFile.Value != null && byteImageFile.Value.Length > 0; model.MimeType = byteImageFile.Value.GetMimeTypeFromImageBytes(); model.Base64Image = model.HasLogo ? Convert.ToBase64String(byteImageFile.Value) : null; } return(View(model)); }
public async Task <IActionResult> UploadAsync(ProfileImageFileModel model) { if (string.IsNullOrWhiteSpace(model.Base64Image) || model.Base64Image.Length < 7) { ModelState.AddModelError(string.Empty, "Please upload an image."); return(View("Index", model)); } var base64String = model.Base64Image.Split(',')[1]; if (!base64String.IsBase64String()) { ModelState.AddModelError(string.Empty, "The image could not be processed."); return(View("Index", model)); } var bytes = Convert.FromBase64String(base64String); if (!bytes.IsValidImage()) { ModelState.AddModelError(string.Empty, "Unsupported image format."); return(View("Index", model)); } var bytePart = new ByteArrayPart(bytes, "image", "application/json"); var response = await _fileServiceAPI.UploadProfileImage(model.UserId, bytePart); if (response.StatusCode == HttpStatusCode.BadRequest) { ModelState.AddModelError(string.Empty, "User already has a profile picture, delete it to upload new"); return(View("Index", model)); } return(RedirectToAction("Index", new { userId = model.UserId })); }