public async Task <IActionResult> Create( [Bind("DepartmentId,Name,LastName,Image,Gender,Email,Phone,Id")] Models.Lecturer lecturer) { if (ModelState.IsValid) { _context.Add(lecturer); await _context.SaveChangesAsync(); // Here we will work on image var webRootPath = _webHostEnvironment.WebRootPath; var files = HttpContext.Request.Form.Files; var lecturerFromDb = await _context.Lecturers.FindAsync(lecturer.Id); //======================== ===================== mean we choose a photo for lecturer ============================================= if (files.Any()) { // validate only the image is allowed if (files[0].ContentType != "image/jpeg") { ModelState.AddModelError(string.Empty, "Failed! Only image type is allowed."); ViewData["DepartmentId"] = new SelectList(_context.Departments, "Id", "Name", lecturer.DepartmentId); return(View(lecturer)); } var upload = Path.Combine(webRootPath, "images"); var fileName = files[0].FileName; await using (var fileStream = new FileStream(Path.Combine(upload, lecturerFromDb.Id + "_" + fileName), FileMode.Create)) { files[0].CopyTo(fileStream); } lecturerFromDb.Image = @"\images\" + lecturerFromDb.Id + "_" + fileName; } // mean we didn't upload photo, so we use the default one else { if (lecturerFromDb.Gender.ToString() == "Male") { var upload = Path.Combine(webRootPath, @"images\" + StaticDetails.ManTeacher); System.IO.File.Copy(upload, webRootPath + @"\images\" + lecturerFromDb.Id + "_" + StaticDetails.ManTeacher); lecturerFromDb.Image = @"\images\" + lecturerFromDb.Id + "_" + StaticDetails.ManTeacher; } else { var upload = Path.Combine(webRootPath, @"images\" + StaticDetails.WomanTeacher); System.IO.File.Copy(upload, webRootPath + @"\images\" + lecturerFromDb.Id + "_" + StaticDetails.WomanTeacher); lecturerFromDb.Image = @"\images\" + lecturerFromDb.Id + "_" + StaticDetails.WomanTeacher; } } await _context.SaveChangesAsync(); //=================================================== End Of Image ============================================================ return(RedirectToAction(nameof(Index))); } ViewData["DepartmentId"] = new SelectList(_context.Departments, "Id", "Name", lecturer.DepartmentId); return(View(lecturer)); }
public async Task <IActionResult> Edit(int id, [Bind("DepartmentId,Name,LastName,Image,Gender,Email,Phone,Id")] Models.Lecturer lecturer) { if (id != lecturer.Id) { return(NotFound()); } if (ModelState.IsValid) { try { var webRootPath = _webHostEnvironment.WebRootPath; var lecturerFromDb = await _context.Lecturers.FindAsync(id); var files = HttpContext.Request.Form.Files; //mean we choose another image, so we have to update this and remove the old one if (files.Any()) { // validate only the image is allowed if (files[0].ContentType != "image/jpeg") { ModelState.AddModelError(string.Empty, "Failed! Only image type is allowed."); ViewData["DepartmentId"] = new SelectList(_context.Departments, "Id", "Name", lecturer.DepartmentId); return(View(lecturer)); } var fileName = files[0].FileName; var upload = Path.Combine(webRootPath, "images"); // Now let's delete the old one // because we have added the (\), we have to remove this first var oldImagePath = Path.Combine(webRootPath, lecturerFromDb.Image.Trim('\\')); if (System.IO.File.Exists(oldImagePath)) { System.IO.File.Delete(oldImagePath); } // Now let's add teh new one await using (var fileStream = new FileStream(Path.Combine(upload, id + "_" + fileName), FileMode.Create)) { files[0].CopyTo(fileStream); } // If image is set we update the image lecturerFromDb.Image = @"\images\" + id + "_" + fileName; } //here no image is choose we don't update the image field lecturerFromDb.Name = lecturer.Name; lecturerFromDb.LastName = lecturer.LastName; lecturerFromDb.Gender = lecturer.Gender; lecturerFromDb.DepartmentId = lecturer.DepartmentId; lecturerFromDb.Email = lecturer.Email; lecturerFromDb.Phone = lecturer.Phone; await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!LecturerExists(lecturer.Id)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } ViewData["DepartmentId"] = new SelectList(_context.Departments, "Id", "Name", lecturer.DepartmentId); return(View(lecturer)); }