public HttpResponseMessage RenameGallery(EditGalleryViewModel model) { HttpResponseMessage response; var gallery = _galleryService.Find(model.Id); if (gallery == null) { response = Request.CreateResponse(HttpStatusCode.NotFound, "the gallery not found"); return(response); } gallery.Name = model.GalleryName; _unitOfWork.SaveChanges(); response = Request.CreateResponse(HttpStatusCode.OK, "Selected gallery renamed with successfully"); return(response); }
public async Task <IActionResult> EditGallery(Guid galleryId) { // Находим галерею по Id Gallery gallery = await cmsDB.Galleries.FirstAsync(g => g.Id == galleryId); // Создаем модель для передачи в представление EditGalleryViewModel model = new EditGalleryViewModel() { GalleryId = galleryId, GalleryTitle = gallery.GalleryTitle, GalleryDescription = gallery.GalleryDescription, GalleryPreviewImage = gallery.GalleryPreviewImage }; // Возвращаем модель в представление return(View(model)); }
public async Task <IActionResult> EditGallery(Guid galleryId) { // Находим галерею по Id Gallery gallery = await _websiteDB.Galleries.FirstOrDefaultAsync(g => g.Id == galleryId); if (gallery != null) { // Создаем модель для передачи в представление EditGalleryViewModel model = new EditGalleryViewModel() { GalleryId = galleryId, GalleryTitle = gallery.GalleryTitle, GalleryDescription = gallery.GalleryDescription.SpecSymbolsToEdit(), GalleryPreviewImage = gallery.GallerySliderImage }; // Возвращаем модель в представление return(View(model)); } else { return(Redirect("/Main/PageNotFound")); } }
public async Task <IActionResult> EditGallery(EditGalleryViewModel model, IFormFile sliderImage) { // Настройки галереи SettingsGallery settings = await _websiteDB.SettingsGallery.FirstAsync(); int imageSize = 1048576 * settings.MaxImageSize; // Если размер превью-изображения превышает установленный лимит, генерируем ошибку модели if (sliderImage != null && sliderImage.Length > imageSize) { ModelState.AddModelError("GalleryPreviewImage", $"Файл \"{sliderImage.FileName}\" превышает установленный лимит {settings.MaxImageSize}MB."); } // Проверяем, чтобы такая галерея существовала в БД Gallery gallery = await _websiteDB.Galleries.FirstOrDefaultAsync(g => g.Id == model.GalleryId); if (gallery == null) { return(Redirect("/Main/PageNotFound")); } // Если ошибок не возникло, заходим в тело условия if (ModelState.IsValid) { if (string.IsNullOrEmpty(model.GalleryDescription)) { model.GalleryDescription = ""; } // Если исходный файл не равен NULL и его размер больше 0, заходим в тело условия if (sliderImage != null && sliderImage.Length > 0) { // Создаем новый объект класса FileInfo из полученного изображения для дальнейшей обработки FileInfo imgFile = new FileInfo(sliderImage.FileName); // Приводим расширение к нижнему регистру (если оно было в верхнем) string imgExtension = imgFile.Extension.ToLower(); // Генерируем новое имя для файла string newFileName = Guid.NewGuid() + imgExtension; // Пути сохранения файла string sliderDirectory = "/uploadedfiles/gallery/images/slider/"; // Пути сохранения файла string pathSliderImage = sliderDirectory + newFileName; // уменьшенное изображение // Если такой директории не существует, то создаем её if (!Directory.Exists(_appEnvironment.WebRootPath + sliderDirectory)) { Directory.CreateDirectory(_appEnvironment.WebRootPath + sliderDirectory); } // В операторе try/catch делаем уменьшенную копию изображения. // Если входным файлом окажется не изображение, нас перекинет в блок CATCH и выведет сообщение об ошибке try { // Создаем объект класса SixLabors.ImageSharp.Image и грузим в него полученное изображение using (Image image = Image.Load(sliderImage.OpenReadStream())) { // Создаем уменьшенную копию и обрезаем её var clone = image.Clone(x => x.Resize(new ResizeOptions { Mode = ResizeMode.Crop, Size = new Size(1056, 220) })); // Сохраняем уменьшенную копию await clone.SaveAsync(_appEnvironment.WebRootPath + pathSliderImage, new JpegEncoder { Quality = settings.ImageResizeQuality }); } } // Если вдруг что-то пошло не так (например, на вход подало не картинку), то выводим сообщение об ошибке catch { // Создаем сообщение об ошибке для вывода пользователю ModelState.AddModelError("GalleryPreviewImage", $"Файл {sliderImage.FileName} имеет неверный формат."); // Возвращаем модель с сообщением об ошибке в представление return(View(model)); } // Удаляем предыдущее изображения для слайдера if (gallery.GallerySliderImage != null) { FileInfo imageToDelete = new FileInfo(_appEnvironment.WebRootPath + gallery.GallerySliderImage); if (imageToDelete.Exists) { imageToDelete.Delete(); } } // Обновляем значения на полученные с формы gallery.GalleryTitle = model.GalleryTitle; gallery.GalleryDescription = model.GalleryDescription.SpecSymbolsToView(); gallery.GallerySliderImage = pathSliderImage; // Сохраняем изменения в БД _websiteDB.Galleries.Update(gallery); await _websiteDB.SaveChangesAsync(); return(RedirectToAction("Index", "Gallery")); } // Если не была выбрана картинка для превью, заходим в блок ELSE else { // Обновляем значения на полученные с формы gallery.GalleryTitle = model.GalleryTitle; gallery.GalleryDescription = model.GalleryDescription.SpecSymbolsToView(); // Сохраняем изменения в БД _websiteDB.Galleries.Update(gallery); await _websiteDB.SaveChangesAsync(); return(RedirectToAction("Index", "Gallery")); } } // Возврат модели при неудачной валидации return(View(model)); }
public async Task <IActionResult> EditGallery(EditGalleryViewModel model, IFormFile previewImage) { // Если размер превью-изображения превышает установленный лимит, генерируем ошибку модели if (previewImage != null && previewImage.Length > 2097152) // Хардкод. Потом обязательно заменить !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! { ModelState.AddModelError("GalleryPreviewImage", $"Файл \"{previewImage.FileName}\" превышает установленный лимит 2MB."); } // Если ошибок не возникло, заходим в тело условия if (ModelState.IsValid) { // Если исходный файл не равен NULL и его размер больше 0, заходим в тело условия if (previewImage != null && previewImage.Length > 0) { // Создаем новый объект класса FileInfo из полученного изображения для дальнейшей обработки FileInfo imgFile = new FileInfo(previewImage.FileName); // Приводим расширение к нижнему регистру (если оно было в верхнем) string imgExtension = imgFile.Extension.ToLower(); // Генерируем новое имя для файла string newFileName = Guid.NewGuid() + imgExtension; // Пути сохранения файла string pathPreview = "/files/images/preview/" + newFileName; // уменьшенное изображение // В операторе try/catch делаем уменьшенную копию изображения. // Если входным файлом окажется не изображение, нас перекинет в блок CATCH и выведет сообщение об ошибке try { // Создаем объект класса SixLabors.ImageSharp.Image и грузим в него полученное изображение using (Image image = Image.Load(previewImage.OpenReadStream())) { // Создаем уменьшенную копию и обрезаем её var clone = image.Clone(x => x.Resize(new ResizeOptions { Mode = ResizeMode.Crop, Size = new Size(300, 200) })); // Сохраняем уменьшенную копию await clone.SaveAsync(_appEnvironment.WebRootPath + pathPreview, new JpegEncoder { Quality = 50 }); } } // Если вдруг что-то пошло не так (например, на вход подало не картинку), то выводим сообщение об ошибке catch { // Создаем сообщение об ошибке для вывода пользователю ModelState.AddModelError("GalleryPreviewImage", $"Файл {previewImage.FileName} имеет неверный формат."); // Возвращаем модель с сообщением об ошибке в представление return(View(model)); } Gallery gallery = await _websiteDB.Galleries.FirstAsync(g => g.Id == model.GalleryId); // Если до этого превьюшка была не по дефолту, удаляем её с сервера if (gallery.GalleryPreviewImage != "/files/images/preview/nopreview.jpg") // Хардкод. Потом обязательно заменить !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! { FileInfo imageToDelete = new FileInfo(_appEnvironment.WebRootPath + gallery.GalleryPreviewImage); if (imageToDelete.Exists) { imageToDelete.Delete(); } } // Обновляем значения на полученные с формы gallery.GalleryTitle = model.GalleryTitle; gallery.GalleryDescription = model.GalleryDescription; gallery.GalleryPreviewImage = pathPreview; // Сохраняем изменения в БД _websiteDB.Galleries.Update(gallery); await _websiteDB.SaveChangesAsync(); return(RedirectToAction("Index", "Gallery")); } // Если не была выбрана картинка для превью, заходим в блок ELSE else { // Выбираем галерею из БД по Id Gallery gallery = await _websiteDB.Galleries.FirstAsync(g => g.Id == model.GalleryId); // Обновляем значения на полученные с формы gallery.GalleryTitle = model.GalleryTitle; gallery.GalleryDescription = model.GalleryDescription; // Сохраняем изменения в БД _websiteDB.Galleries.Update(gallery); await _websiteDB.SaveChangesAsync(); return(RedirectToAction("Index", "Gallery")); } } // Возврат модели при неудачной валидации return(View(model)); }