public async Task <IActionResult> Update(IFormCollection model) { try { // Perform an initial check to catch FileUpload class // attribute violations. if (!(ModelState.IsValid) || !(User.Identity.IsAuthenticated)) { return(View()); } if (model.Files.Count > 0) { ProjectFormData result = new ProjectFormData() { Title = model["item.Title"], Author = model["item.Author"], Description = model["item.Description"], Language = model["item.Language"], GithubLink = model["item.GithubLink"], Status = model["item.Status"].ToString(), File = model.Files[0] }; await _unitOfWork.ProjectControl.UpdateProject(result, ModelState, Guid.Parse(model["item.ProjectId"]), User.Identity.Name); _unitOfWork.Complete(); return(RedirectToAction(nameof(Index))); } else { ProjectFormData result = new ProjectFormData() { Title = model["item.Title"], Author = model["item.Author"], Description = model["item.Description"], Language = model["item.Language"], GithubLink = model["item.GithubLink"], Status = model["item.Status"].ToString() }; await _unitOfWork.ProjectControl.UpdateProject(result, ModelState, Guid.Parse(model["item.ProjectId"]), User.Identity.Name); _unitOfWork.Complete(); return(RedirectToAction(nameof(Index))); } } catch { return(View()); } }
public async Task UpdateProject(ProjectFormData model, ModelStateDictionary modelState, Guid id, string userName) { var user = await _userManager.FindByNameAsync(userName); var trustedFileNameForDisplay = string.Empty; var streamedFileImageContent = new byte[0]; var untrustedFileNameForStorage = string.Empty; var trustedFilePathStorage = string.Empty; var trustedFileNameForFileStorage = string.Empty; var checkState = string.Empty; // Get Project Id and update all new fields var getProject = await _context.ClamUserProjects.FindAsync(id); if (model.File != null) { streamedFileImageContent = await FileHelpers.ProcessFormFile <ProjectFormData>( model.File, modelState, _permittedExtentions, _fileSizeLimit); // Filter Check the state of the file if (!modelState.IsValid) { checkState = "ModelState is Invalid"; } untrustedFileNameForStorage = model.File.FileName; // Don't trust the file name sent by the client. To display // the file name, HTML-encode the value. trustedFileNameForDisplay = WebUtility.HtmlEncode( model.File.FileName); // Bind form data to the model var keyPathFolder = FilePathUrlHelper.GenerateKeyPath(user.Id); var generateKeyFolder = GenerateSecurity.Encode(user.Id); // Path Location & Directory Check trustedFilePathStorage = String.Format("{0}\\{1}\\{2}\\{3}", _targetFolderPath, keyPathFolder, generateKeyFolder, Path.GetRandomFileName()); Directory.CreateDirectory(trustedFilePathStorage); using (var fileStream = new FileStream(Path.Combine(trustedFilePathStorage, untrustedFileNameForStorage), FileMode.Create, FileAccess.Write)) { await model.File.CopyToAsync(fileStream); fileStream.Close(); } // Remove Physical Location await RemoveProject(id); _context.Entry(getProject).Entity.Title = model.Title; _context.Entry(getProject).Entity.Author = model.Author; _context.Entry(getProject).Entity.Description = model.Description; _context.Entry(getProject).Entity.Language = model.Language; _context.Entry(getProject).Entity.GithubLink = model.GithubLink; _context.Entry(getProject).Entity.Status = bool.Parse(model.Status); _context.Entry(getProject).Entity.LastModified = DateTime.Now; _context.Entry(getProject).Entity.ImageGifLocation = Path.Combine(trustedFilePathStorage, untrustedFileNameForStorage); _context.Update(getProject); await _context.SaveChangesAsync(); } else { _context.Entry(getProject).Entity.Title = model.Title; _context.Entry(getProject).Entity.Author = model.Author; _context.Entry(getProject).Entity.Description = model.Description; _context.Entry(getProject).Entity.Language = model.Language; _context.Entry(getProject).Entity.GithubLink = model.GithubLink; _context.Entry(getProject).Entity.Status = bool.Parse(model.Status); _context.Entry(getProject).Entity.LastModified = DateTime.Now; _context.Update(getProject); await _context.SaveChangesAsync(); } }
public async Task AddProject(ProjectFormData model, ModelStateDictionary modelState, string userName) { var user = await _userManager.FindByNameAsync(userName); var trustedFileNameForDisplay = string.Empty; var streamedFileImageContent = new byte[0]; var untrustedFileNameForStorage = string.Empty; var trustedFilePathStorage = string.Empty; var trustedFileNameForFileStorage = string.Empty; var test = string.Empty; streamedFileImageContent = await FileHelpers.ProcessFormFile <ProjectFormData>( model.File, modelState, _permittedExtentions, _fileSizeLimit); if (!modelState.IsValid) { test = "ModelState is Invalid"; } untrustedFileNameForStorage = model.File.FileName; // Don't trust the file name sent by the client. To display // the file name, HTML-encode the value. trustedFileNameForDisplay = WebUtility.HtmlEncode( model.File.FileName); // Bind form data to the model var keyPathFolder = FilePathUrlHelper.GenerateKeyPath(user.Id); var generateKeyFolder = GenerateSecurity.Encode(user.Id); // Path Location & Directory Check trustedFilePathStorage = String.Format("{0}\\{1}\\{2}\\{3}", _targetFolderPath, keyPathFolder, generateKeyFolder, Path.GetRandomFileName()); Directory.CreateDirectory(trustedFilePathStorage); using (var fileStream = new FileStream(Path.Combine(trustedFilePathStorage, untrustedFileNameForStorage), FileMode.Create, FileAccess.Write)) { await model.File.CopyToAsync(fileStream); fileStream.Close(); } ClamUserProjects result = new ClamUserProjects() { Author = user.FirstName, Title = model.Title, Description = model.Description, ImageGifLocation = Path.Combine(trustedFilePathStorage, untrustedFileNameForStorage), Language = model.Language, GithubLink = model.GithubLink, Status = bool.Parse(model.Status), UserId = user.Id, LastModified = DateTime.Now, DateCreated = DateTime.Now }; await _context.AddAsync(result); await _context.SaveChangesAsync(); }