public ActionResult CreateNews(News news, HttpPostedFileBase ImageUrl) { news.CreateDate = DateTime.Now.ToString("dd/MM/yyyy"); news.CreateBy = Session["username"].ToString(); news.status = 1; news.prioritize = 1; var addNews = dbcontext.News.Add(news); NewsImage newsImage = new NewsImage(); string fileName = ""; try { if (ImageUrl != null && ImageUrl.ContentLength > 0) { fileName = Path.GetFileName(ImageUrl.FileName); string path = Path.Combine(Server.MapPath("/Assets/images"), Path.GetFileName(ImageUrl.FileName)); ImageUrl.SaveAs(path); addNews.UrlRepresent = fileName; } } catch (Exception ex) { } dbcontext.SaveChanges(); return(RedirectToAction("NewsIndex")); }
public IList <NewsImage> FindALL() { List <NewsImage> list = new List <NewsImage>(); sql = "select * from NewsImage order by id desc"; ds = DbHelperSQL.GetDataSet(sql); if (ds == null) { return(null); } else { foreach (DataRow dr in ds.Tables[0].Rows) { NewsImage a = new NewsImage(); a.AddDate = Convert.ToDateTime(dr["addDate"].ToString()); a.Url = dr["url"].ToString(); a.Content = dr["content"].ToString(); a.Id = dr["id"]; a.Title = dr["title"].ToString(); list.Add(a); } return(list); } }
public ActionResult CreateNewsImage(int newsid) { NewsImage data = new NewsImage(); data.NewsId = newsid; return(View("UpdateNewsImage", data)); }
public ActionResult DeleteConfirmed(int id) { NewsImage newsImage = db.NewsImages.Find(id); db.NewsImages.Remove(newsImage); db.SaveChanges(); return RedirectToAction("Index"); }
void ReleaseDesignerOutlets() { if (DateText != null) { DateText.Dispose(); DateText = null; } if (HeadlineText != null) { HeadlineText.Dispose(); HeadlineText = null; } if (NewsImage != null) { NewsImage.Dispose(); NewsImage = null; } if (PreambleText != null) { PreambleText.Dispose(); PreambleText = null; } if (SourceLable != null) { SourceLable.Dispose(); SourceLable = null; } }
public void DateBind(object id)//绑定要修改的信息 { NewsImageBLL newsimagelbll = new NewsImageBLL(); NewsImage ni = new NewsImage(); ni = newsimagelbll.GetNewsImage(id); TxtTitle.Text = ni.Title; this.Image1.ImageUrl = "~/IndexImages/" + ni.Url; TxtDate.Text = ni.AddDate.ToString("d"); }
public ActionResult Edit([Bind(Include = "Id,Caption,Image,NewsId")] NewsImage newsImage) { if (ModelState.IsValid) { db.Entry(newsImage).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } ViewBag.NewsId = new SelectList(db.News, "Id", "Title", newsImage.NewsId); return View(newsImage); }
public bool Add(NewsImage a) { if (DbHelperSQL.Insert(a)) { return(true); } else { return(false); } }
public bool Update(NewsImage a) { if (DbHelperSQL.Update(a)) { return(true); } else { return(false); } }
public ActionResult Create([Bind(Include = "Id,Caption,Image,NewsId")] NewsImage newsImage) { if (ModelState.IsValid) { db.NewsImages.Add(newsImage); db.SaveChanges(); return RedirectToAction("Index"); } ViewBag.NewsId = new SelectList(db.News, "Id", "Title", newsImage.NewsId); return View(newsImage); }
public async Task <IActionResult> EditNews(Guid newsId, string imageToDeleteName = null) { // Если есть изображение, которое надо удалить, заходим в тело условия if (imageToDeleteName != null) { // Создаем экземпляр класса картинки и присваиваем ему данные из БД NewsImage newsImage = await _websiteDB.NewsImages.FirstOrDefaultAsync(i => i.ImageName == imageToDeleteName); // Делаем еще одну проверку. Лучше перебдеть. Если все ок, заходим в тело условия и удаляем изображения if (newsImage != null) { // Исходные (полноразмерные) изображения FileInfo imageNormal = new FileInfo(_appEnvironment.WebRootPath + newsImage.ImagePathNormal); if (imageNormal.Exists) { imageNormal.Delete(); } // И их уменьшенные копии FileInfo imageScaled = new FileInfo(_appEnvironment.WebRootPath + newsImage.ImagePathScaled); if (imageScaled.Exists) { imageScaled.Delete(); } // Удаляем информацию об изображениях из БД и сохраняем _websiteDB.NewsImages.Remove(newsImage); await _websiteDB.SaveChangesAsync(); } } // Создаем экземпляр класса News и присваиваем ему значения из БД News news = await _websiteDB.News.FirstAsync(n => n.Id == newsId); // Создаем список изображений из БД, закрепленных за выбранной новостью List <NewsImage> images = await _websiteDB.NewsImages.Where(i => i.NewsId == newsId).OrderByDescending(i => i.ImageDate).ToListAsync(); // Создаем модель для передачи в представление и присваиваем значения EditNewsViewModel model = new EditNewsViewModel() { NewsTitle = news.NewsTitle, NewsBody = news.NewsBody, NewsImages = images, // Скрытые поля NewsId = newsId, NewsDate = news.NewsDate, UserName = news.UserName, ImagesCount = images.Count }; ViewBag.Title = $"Редактирование новости \"{news.NewsTitle}\""; // Передаем модель в представление return(View(model)); }
public void Remove(NewsImage item) { var comm = this.GetCommand("sp_NewsImageDelete"); if (comm == null) { return; } comm.AddParameter <int>(this.Factory, "NewsImageId", item.NewsImageId); comm.SafeExecuteNonQuery(); //throw new NotImplementedException(); }
// GET: NewsImages/Details/5 public ActionResult Details(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } NewsImage newsImage = db.NewsImages.Find(id); if (newsImage == null) { return HttpNotFound(); } return View(newsImage); }
protected void btnLoadNewsPic_Click(object sender, EventArgs e) { HttpPostedFile img = HttpContext.Current.Request.Files[0]; var article = Session["article"] as Article; if (img == null || img.ContentLength == 0) { } else { string fileName = img.FileName; string tempFileName = fileName; if (Methods.isPictureFile(fileName)) { int somnum = 0; while (Methods.fileExists(Server.MapPath("~/Temp/"), tempFileName)) { tempFileName = "(" + somnum + ")" + fileName; somnum++; } while (Methods.fileExists(Server.MapPath("~/Images/News/"), tempFileName)) { tempFileName = "(" + somnum + ")" + fileName; somnum++; } try { img.SaveAs(Server.MapPath("~/Temp/") + tempFileName); FileInfo fileInfo = new FileInfo(Server.MapPath("~/Temp/") + tempFileName); fileInfo.IsReadOnly = false; NewsImage imgInfo = new NewsImage(); imgInfo.fileName = tempFileName; article.articleImages.Add(imgInfo); } catch (Exception ex) { } } dlArtPicsPreview.DataSource = article.articleImages; dlArtPicsPreview.DataBind(); } //Response.Write(article.Content); //foreach (NewsImage x in article.articleImages) //{ // Response.Write(x.fileName); //} }
public void Add(NewsImage item) { //var comm = this.GetCommand("sp_NewsImage_Insert"); //if (comm == null) return; //comm.AddParameter<string>(this.Factory, "Url", item.Url); //comm.AddParameter<bool>(this.Factory, "IsActive", item.IsActive); ////comm.AddParameter<DateTime>(this.Factory, "CreateDate", item.CreateDate); ////comm.AddParameter<DateTime>(this.Factory, "EditDate", item.EditDate); //comm.AddParameter<string>(this.Factory, "CreateBy", item.CreateBy); //comm.AddParameter<string>(this.Factory, "Image", item.Image); //comm.AddParameter<int>(this.Factory, "OrderNo", item.OrderNo); //comm.SafeExecuteNonQuery(); throw new NotImplementedException(); }
// GET: NewsImages/Edit/5 public ActionResult Edit(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } NewsImage newsImage = db.NewsImages.Find(id); if (newsImage == null) { return HttpNotFound(); } ViewBag.NewsId = new SelectList(db.News, "Id", "Title", newsImage.NewsId); return View(newsImage); }
public NewsImage Get(NewsImage dummy) { var comm = this.GetCommand("sp_NewsImageGet"); if (comm == null) { return(null); } comm.AddParameter <int>(this.Factory, "NewsImageId", dummy.NewsImageId); var dt = this.GetTable(comm); var sliderBanner = EntityBase.ParseListFromTable <NewsImage>(dt).FirstOrDefault(); return(sliderBanner ?? null); //throw new NotImplementedException(); }
public ActionResult CreateNewsImage(NewsImage model) { if (ModelState.IsValid) { try { model.CreateBy = UserState.SysUser.Fullname; ServiceFactory.NewsImageManager.Add(model, Culture); return(RedirectToAction("SearchNewsImage", "News", new { NewsId = model.NewsId })); } catch (Exception) { //throw; } } return(View("UpdateNewsImage", model)); }
public void Add(NewsImage item, string culture) { var comm = this.GetCommand("sp_NewsImageInsert"); if (comm == null) { return; } comm.AddParameter <int>(this.Factory, "NewsId", item.NewsId); comm.AddParameter <string>(this.Factory, "NewsImageTitle", item.NewsImageTitle); comm.AddParameter <string>(this.Factory, "NewsImageUrl", item.NewsImageUrl); comm.AddParameter <bool>(this.Factory, "IsActive", item.IsActive); comm.AddParameter <string>(this.Factory, "Culture", culture); comm.AddParameter <int>(this.Factory, "OrderNo", item.OrderNo); comm.AddParameter <string>(this.Factory, "CreateBy", item.CreateBy); comm.SafeExecuteNonQuery(); //throw new NotImplementedException(); }
public NewsImage Find(object id) { a = new NewsImage(); string sql = string.Format("select * from NewsImage where id='{0}'", id); dr = DbHelperSQL.GetDateRow(sql); try { a.AddDate = Convert.ToDateTime(dr["AddDate"].ToString()); a.Content = dr["content"].ToString(); a.Id = dr["id"]; a.Title = dr["title"].ToString(); a.Url = dr["url"].ToString(); return(a); } catch { return(null); } }
protected void btnUpldEditNews_Click(object sender, EventArgs e) { HttpPostedFile img = HttpContext.Current.Request.Files[0]; var article = Session["article"] as Article; if (img == null || img.ContentLength == 0) { } else { string fileName = img.FileName; string tempFileName = fileName; if (Methods.isPictureFile(fileName)) { int somnum = 0; // Corrected logic int the below while loops while (Methods.fileExists(Server.MapPath("~/Temp/"), tempFileName) || Methods.fileExists(Server.MapPath("~/Images/News/"), tempFileName)) { tempFileName = "(" + somnum + ")" + fileName; somnum++; } try { img.SaveAs(Server.MapPath("~/Temp/") + tempFileName); FileInfo fileInfo = new FileInfo(Server.MapPath("~/Temp/") + tempFileName); fileInfo.IsReadOnly = false; NewsImage imgInfo = new NewsImage(); imgInfo.fileName = tempFileName; article.articleImages.Add(imgInfo); } catch (Exception ex) { } } //dlEditNewsImgs.DataSource = article.articleImages; //dlEditNewsImgs.DataBind(); } }
public void Update(NewsImage @new, NewsImage old) { var item = @new; item.NewsImageId = old.NewsImageId; var comm = this.GetCommand("sp_NewsImageUpdate"); if (comm == null) { return; } comm.AddParameter <int>(this.Factory, "NewsImageId", item.NewsImageId); comm.AddParameter <int>(this.Factory, "NewsId", item.NewsId); comm.AddParameter <string>(this.Factory, "NewsImageTitle", item.NewsImageTitle); comm.AddParameter <string>(this.Factory, "NewsImageUrl", item.NewsImageUrl); comm.AddParameter <bool>(this.Factory, "IsActive", item.IsActive); comm.AddParameter <int>(this.Factory, "OrderNo", item.OrderNo); comm.SafeExecuteNonQuery(); //throw new NotImplementedException(); }
public ActionResult UpdateNewsImage(NewsImage model) { if (ModelState.IsValid) { var obj = ServiceFactory.NewsImageManager.Get(new NewsImage { NewsImageId = model.NewsImageId }); if (obj != null) { try { ServiceFactory.NewsImageManager.Update(model, obj); return(RedirectToAction("SearchNewsImage", "News", new { NewsId = model.NewsId })); } catch (Exception) { //throw; } } } ViewBag.IsEdit = true; return(View(model)); }
protected void Save_Click(object sender, EventArgs e) { object id = Request.QueryString["id"];//有待改善不安全 NewsImage ni = new NewsImage(); NewsImageBLL newsimagebll = new NewsImageBLL(); string title = Server.HtmlEncode(TxtTitle.Text.Trim()); ni.AddDate = Convert.ToDateTime(TxtDate.Text); ni.Title = title; ni.Id = id; string name = this.Image1.ImageUrl.Substring(14);//原来图片的URL if (FileUp.PostedFile.ContentLength == 0) { ni.Url = name; } else { FileInfo file1 = new FileInfo(FileUp.PostedFile.FileName); if (file1.Extension.ToLower() != ".bmp" && file1.Extension.ToLower() != ".jpg" && file1.Extension.ToLower() != ".jpeg" && file1.Extension.ToLower() != ".png" && file1.Extension.ToLower() != ".gif") { Response.Write("<script>alert('上传的资料格式应为bmp/jpg/jpeg/png/gif格式');history.back(-1);</script>"); return; } string webFilePath = Server.MapPath("~/NewsImages/" + name);//用来删除原有的图片 string indexpath = Server.MapPath(this.Image1.ImageUrl); string filename = FileUp.PostedFile.FileName; filename = System.IO.Path.GetFileName(filename); //改文件名 int index = filename.LastIndexOf("."); string lastName = filename.Substring(index, filename.Length - index);//获得文件后缀类型 //新文件名称,以时间年月日时分秒作为文件名 string newname = "NewImage" + DateTime.Now.ToString("yyyyMMddhhmmss") + lastName; string newpath = Server.MapPath("/NewsImages/" + newname);//用来保存新上传的图片 string newindexpath = Server.MapPath("/IndexImages/" + newname); System.IO.FileInfo file = new System.IO.FileInfo(webFilePath); System.IO.FileInfo indexfile = new System.IO.FileInfo(indexpath); if (file.Exists) { file.Delete();//删除 } if (indexfile.Exists) { indexfile.Delete();//删除 } if (!File.Exists(newpath)) { FileUp.SaveAs(newpath);// 使用 SaveAs 方法保存文件 System.Drawing.Image image = System.Drawing.Image.FromFile(newpath); float a = image.Width / image.Height; if (a > 5) { image.Dispose(); File.Delete(newpath); Response.Write("<script>alert('高宽比例不合适');</script>"); return; } System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(image, 168, 155); if (!File.Exists(newindexpath)) { bmp.Save(newindexpath); } image.Dispose(); bmp.Dispose(); } ni.Url = newname; } if (newsimagebll.Update(ni)) { Response.Write("<script>alert('更新成功');window.location.href='NewsImageMgr.aspx';</script>"); } else { Response.Write("<script>alert('更新失败');history.back();</script>"); } }
protected void Add_Click(object sender, EventArgs e) { NewsImage na = new NewsImage(); NewsImageBLL newsimagebll = new NewsImageBLL(); string newname = ""; if (FileUp.HasFile) { FileInfo file = new FileInfo(FileUp.PostedFile.FileName); if (file.Extension.ToLower() != ".bmp" && file.Extension.ToLower() != ".jpg" && file.Extension.ToLower() != ".jpeg" && file.Extension.ToLower() != ".png" && file.Extension.ToLower() != ".gif") { Response.Write("<script>alert('上传的资料格式应为bmp/jpg/jpeg/png/gif格式');history.back(-1);</script>"); return; } string filename = FileUp.PostedFile.FileName; filename = System.IO.Path.GetFileName(filename); //改文件名 int index = filename.LastIndexOf("."); string lastName = filename.Substring(index, filename.Length - index);//获得文件后缀类型 //新文件名称,以时间年月日时分秒作为文件名 newname = "NewImage" + DateTime.Now.ToString("yyyyMMddhhmmss") + lastName; double size = FileUp.PostedFile.ContentLength; string webFilePath = Server.MapPath("/NewsImages/" + newname); if (!File.Exists(webFilePath)) { FileUp.SaveAs(webFilePath); // 使用 SaveAs 方法保存文件 System.Drawing.Image image = System.Drawing.Image.FromFile(webFilePath); float a = image.Width / image.Height; if (a > 5) { image.Dispose(); File.Delete(webFilePath); Response.Write("<script>alert('高宽比例不合适');</script>"); return; } System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(image, 168, 155); string path = Server.MapPath("/IndexImages/" + newname); if (!File.Exists(path)) { bmp.Save(path); } image.Dispose(); bmp.Dispose(); } else { Response.Write("<script>alert('上传失败,请重试!')</script>"); return; } } na.Url = newname; na.AddDate = Convert.ToDateTime(TxtDate.Text); string title = Server.HtmlEncode(TxtTitle.Text.Trim()); na.Title = title; if (newsimagebll.Add(na)) { Response.Write("<script>alert('添加成功');window.location.href='NewsImageMgr.aspx';</script>"); } else { Response.Write("<script>alert('添加失败');history.back();</script>"); } }
public async Task <IActionResult> EditNews(EditNewsViewModel model, IFormFileCollection uploads) { SettingsNews settings = await _websiteDB.SettingsNews.FirstAsync(); int imageSize = 1048576 * settings.MaxImageSize; // Ищем запись в БД по Id News news = await _websiteDB.News.FirstOrDefaultAsync(n => n.Id == model.NewsId); // Если запись существует, продолжаем обработку if (news != null) { // Проверяем, чтобы общее количество изображений не превышало установленный лимит if (uploads.Count > 3 - model.NewsImagesCount) { ModelState.AddModelError("NewsImage", $"Превышен лимит изображений для одной записи: 3"); } else { // Проверяем, чтобы размер файлов не превышал заданный объем foreach (var file in uploads) { if (file.Length > imageSize) { ModelState.AddModelError("NewsImage", $"Файл \"{file.FileName}\" превышает установленный лимит {settings.MaxImageSize}MB."); break; } } } // Если все в порядке, заходим в тело условия if (ModelState.IsValid) { //News news = await _websiteDB.News.FirstAsync(n => n.Id == model.NewsId); // Обновляем данные news.NewsTitle = model.NewsTitle; news.NewsBody = model.NewsBody.SpecSymbolsToView(); // Далее начинаем обработку загружаемых изображений List <NewsImage> newsImages = new List <NewsImage>(); foreach (var uploadedImage in uploads) { // Если размер входного файла больше 0, заходим в тело условия if (uploadedImage.Length > 0) { // Создаем новый объект класса FileInfo из полученного изображения для дальнейшей обработки FileInfo imgFile = new FileInfo(uploadedImage.FileName); // Приводим расширение к нижнему регистру (если оно было в верхнем) string imgExtension = imgFile.Extension.ToLower(); // Генерируем новое имя для файла string newFileName = Guid.NewGuid() + imgExtension; // Пути сохранения файла string originalDirectory = "/uploadedfiles/news/images/original/"; string scaledDirectory = "/uploadedfiles/news/images/scaled/"; string pathOriginal = originalDirectory + newFileName; // изображение исходного размера string pathScaled = scaledDirectory + newFileName; // уменьшенное изображение // Если такие директории не созданы, то создаем их if (!Directory.Exists(_appEnvironment.WebRootPath + originalDirectory)) { Directory.CreateDirectory(_appEnvironment.WebRootPath + originalDirectory); } if (!Directory.Exists(_appEnvironment.WebRootPath + scaledDirectory)) { Directory.CreateDirectory(_appEnvironment.WebRootPath + scaledDirectory); } // В операторе try/catch делаем уменьшенную копию изображения. // Если входным файлом окажется не изображение, нас перекинет в блок CATCH и выведет сообщение об ошибке try { // Создаем объект класса SixLabors.ImageSharp.Image и грузим в него полученное изображение using (Image image = Image.Load(uploadedImage.OpenReadStream())) { // Создаем уменьшенную копию и обрезаем её var clone = image.Clone(x => x.Resize(new ResizeOptions { Mode = ResizeMode.Crop, Size = new Size(300, 169) })); // Сохраняем уменьшенную копию await clone.SaveAsync(_appEnvironment.WebRootPath + pathScaled, new JpegEncoder { Quality = settings.ImageResizeQuality }); // Сохраняем исходное изображение await image.SaveAsync(_appEnvironment.WebRootPath + pathOriginal); } } // Если вдруг что-то пошло не так (например, на вход подало не картинку), то выводим сообщение об ошибке catch { // Создаем сообщение об ошибке для вывода пользователю ModelState.AddModelError("NewsImage", $"Ошибка при обработке файла {uploadedImage.FileName}. Обратитесь к администратору сайта."); // Удаляем только что созданные файлы (если ошибка возникла не на первом файле) foreach (var image in newsImages) { // Исходные (полноразмерные) изображения FileInfo imageOriginal = new FileInfo(_appEnvironment.WebRootPath + image.ImagePathOriginal); if (imageOriginal.Exists) { imageOriginal.Delete(); } // И их уменьшенные копии FileInfo imageScaled = new FileInfo(_appEnvironment.WebRootPath + image.ImagePathScaled); if (imageScaled.Exists) { imageScaled.Delete(); } } // Возвращаем модель с сообщением об ошибке в представление return(View(model)); } // Создаем объект класса NewsImage со всеми параметрами NewsImage newsImage = new NewsImage() { Id = Guid.NewGuid(), ImageName = newFileName, ImagePathOriginal = pathOriginal, ImagePathScaled = pathScaled, NewsId = news.Id, ImageDate = DateTime.Now }; // Добавляем объект newsImage в список newsImages newsImages.Add(newsImage); } } // Если в процессе выполнения не возникло ошибок, сохраняем всё в БД if (newsImages != null && newsImages.Count > 0) { await _websiteDB.NewsImages.AddRangeAsync(newsImages); } _websiteDB.News.Update(news); await _websiteDB.SaveChangesAsync(); // Редирект на главную страницу return(RedirectToAction("Index", "News")); } // В случае, если при редактировании пытаться загрузить картинку выше разрешенного лимита, то перестают отображаться уже имеющиеся изображения // При перегонке модели из гет в пост, теряется список с изображениями. Причина пока не ясна, поэтому сделал такой костыль // Счетчик соответственно тоже обнулялся, поэтому его тоже приходится переназначать заново List <NewsImage> images = await _websiteDB.NewsImages.Where(i => i.NewsId == model.NewsId).OrderByDescending(i => i.ImageDate).ToListAsync(); model.NewsImages = images; model.NewsImagesCount = images.Count; // Возврат модели в представление в случае, если запорится валидация return(View(model)); } else { return(Redirect("/Main/PageNotFound")); } }
public async Task <IActionResult> CreateNews(CreateNewsViewModel model, IFormFileCollection uploads) { SettingsNews settings = await _websiteDB.SettingsNews.FirstAsync(); // Объем изображения в мегабайтах int imageSize = 1048576 * settings.MaxImageSize; if (uploads.Count > 3) { ModelState.AddModelError("NewsImage", $"Нельзя загрузить больше 3 изображений"); } else { // Проверяем, чтобы размер файлов не превышал заданный объем foreach (var file in uploads) { if (file.Length > imageSize) { ModelState.AddModelError("NewsImage", $"Файл \"{file.FileName}\" превышает установленный лимит {settings.MaxImageSize}MB."); break; } } } // Если все в порядке, заходим в тело условия if (ModelState.IsValid) { // Создаем экземпляр класса News и присваиваем ему значения News news = new News() { Id = Guid.NewGuid(), NewsTitle = model.NewsTitle, NewsBody = model.NewsBody.SpecSymbolsToView(), NewsDate = DateTime.Now, NewsUserName = User.Identity.Name }; // Далее начинаем обработку изображений List <NewsImage> newsImages = new List <NewsImage>(); foreach (var uploadedImage in uploads) { // Если размер входного файла больше 0, заходим в тело условия if (uploadedImage.Length > 0) { // Создаем новый объект класса FileInfo из полученного изображения для дальнейшей обработки FileInfo imgFile = new FileInfo(uploadedImage.FileName); // Приводим расширение к нижнему регистру (если оно было в верхнем) string imgExtension = imgFile.Extension.ToLower(); // Генерируем новое имя для файла string newFileName = Guid.NewGuid() + imgExtension; // Пути сохранения файла string originalDirectory = "/uploadedfiles/news/images/original/"; string scaledDirectory = "/uploadedfiles/news/images/scaled/"; string pathOriginal = originalDirectory + newFileName; // изображение исходного размера string pathScaled = scaledDirectory + newFileName; // уменьшенное изображение // Если такие директории не созданы, то создаем их if (!Directory.Exists(_appEnvironment.WebRootPath + originalDirectory)) { Directory.CreateDirectory(_appEnvironment.WebRootPath + originalDirectory); } if (!Directory.Exists(_appEnvironment.WebRootPath + scaledDirectory)) { Directory.CreateDirectory(_appEnvironment.WebRootPath + scaledDirectory); } // В операторе try/catch делаем уменьшенную копию изображения. // Если входным файлом окажется не изображение, нас перекинет в блок CATCH и выведет сообщение об ошибке try { // Создаем объект класса SixLabors.ImageSharp.Image и грузим в него полученное изображение using (Image image = Image.Load(uploadedImage.OpenReadStream())) { // Создаем уменьшенную копию и обрезаем её var clone = image.Clone(x => x.Resize(new ResizeOptions { Mode = ResizeMode.Crop, Size = new Size(300, 169) })); // Сохраняем уменьшенную копию await clone.SaveAsync(_appEnvironment.WebRootPath + pathScaled, new JpegEncoder { Quality = settings.ImageResizeQuality }); // Сохраняем исходное изображение await image.SaveAsync(_appEnvironment.WebRootPath + pathOriginal); } } // Если вдруг что-то пошло не так (например, на вход подало не картинку), то выводим сообщение об ошибке catch { // Создаем сообщение об ошибке для вывода пользователю ModelState.AddModelError("NewsImage", $"Ошибка при загрузке файла {uploadedImage.FileName}. Обратитесь к администратору сайта."); // Удаляем только что созданные файлы (если ошибка возникла не на первом файле) foreach (var image in newsImages) { // Исходные (полноразмерные) изображения FileInfo imageOriginal = new FileInfo(_appEnvironment.WebRootPath + image.ImagePathOriginal); if (imageOriginal.Exists) { imageOriginal.Delete(); } // И их уменьшенные копии FileInfo imageScaled = new FileInfo(_appEnvironment.WebRootPath + image.ImagePathScaled); if (imageScaled.Exists) { imageScaled.Delete(); } } // Возвращаем модель с сообщением об ошибке в представление return(View(model)); } // Создаем объект класса NewsImage со всеми параметрами NewsImage newsImage = new NewsImage() { Id = Guid.NewGuid(), ImageName = newFileName, ImagePathOriginal = pathOriginal, ImagePathScaled = pathScaled, NewsId = news.Id, ImageDate = DateTime.Now }; // Добавляем объект newsImage в список newsImages newsImages.Add(newsImage); } } // Если в процессе выполнения не возникло ошибок, сохраняем всё в БД if (newsImages != null && newsImages.Count > 0) { await _websiteDB.NewsImages.AddRangeAsync(newsImages); } await _websiteDB.News.AddAsync(news); await _websiteDB.SaveChangesAsync(); // Редирект на главную страницу return(RedirectToAction("Index", "News")); } // Возврат модели в представление в случае, если запорится валидация return(View(model)); }
public bool Add(NewsImage newsimage) { return(NewsImageDao.Add(newsimage)); }
public async Task <IActionResult> AddNews(AddNewsViewModel model, IFormFileCollection uploads) { // Проверяем, чтобы размер файлов не превышал заданный объем foreach (var file in uploads) { if (file.Length > 2097152) { ModelState.AddModelError("NewsImage", $"Файл \"{file.FileName}\" превышает установленный лимит 2MB."); break; } } // Если все в порядке, заходим в тело условия if (ModelState.IsValid) { // Создаем экземпляр класса News и присваиваем ему значения News news = new News() { Id = Guid.NewGuid(), NewsTitle = model.NewsTitle, NewsBody = model.NewsBody, NewsDate = DateTime.Now, UserName = "******" // В рабочем варианте будет брать имя из User.Identity }; // Далее начинаем обработку изображений List <NewsImage> newsImages = new List <NewsImage>(); foreach (var uploadedImage in uploads) { // Если размер входного файла больше 0, заходим в тело условия if (uploadedImage.Length > 0) { // Создаем новый объект класса FileInfo из полученного изображения для дальнейшей обработки FileInfo imgFile = new FileInfo(uploadedImage.FileName); // Приводим расширение к нижнему регистру (если оно было в верхнем) string imgExtension = imgFile.Extension.ToLower(); // Генерируем новое имя для файла string newFileName = Guid.NewGuid() + imgExtension; // Пути сохранения файла string pathNormal = "/files/images/normal/" + newFileName; // изображение исходного размера string pathScaled = "/files/images/scaled/" + newFileName; // уменьшенное изображение // В операторе try/catch делаем уменьшенную копию изображения. // Если входным файлом окажется не изображение, нас перекинет в блок CATCH и выведет сообщение об ошибке try { // Создаем объект класса SixLabors.ImageSharp.Image и грузим в него полученное изображение using (Image image = Image.Load(uploadedImage.OpenReadStream())) { // Создаем уменьшенную копию и обрезаем её var clone = image.Clone(x => x.Resize(new ResizeOptions { Mode = ResizeMode.Crop, Size = new Size(300, 200) })); // Сохраняем уменьшенную копию await clone.SaveAsync(_appEnvironment.WebRootPath + pathScaled, new JpegEncoder { Quality = 50 }); // Сохраняем исходное изображение await image.SaveAsync(_appEnvironment.WebRootPath + pathNormal); } } // Если вдруг что-то пошло не так (например, на вход подало не картинку), то выводим сообщение об ошибке catch { // Создаем сообщение об ошибке для вывода пользователю ModelState.AddModelError("NewsImage", $"Файл {uploadedImage.FileName} имеет неверный формат."); // Удаляем только что созданные файлы (если ошибка возникла не на первом файле) foreach (var image in newsImages) { // Исходные (полноразмерные) изображения FileInfo imageNormal = new FileInfo(_appEnvironment.WebRootPath + image.ImagePathNormal); if (imageNormal.Exists) { imageNormal.Delete(); } // И их уменьшенные копии FileInfo imageScaled = new FileInfo(_appEnvironment.WebRootPath + image.ImagePathScaled); if (imageScaled.Exists) { imageScaled.Delete(); } } // Возвращаем модель с сообщением об ошибке в представление return(View(model)); } // Создаем объект класса NewsImage со всеми параметрами NewsImage newsImage = new NewsImage() { Id = Guid.NewGuid(), ImageName = newFileName, ImagePathNormal = pathNormal, ImagePathScaled = pathScaled, NewsId = news.Id }; // Добавляем объект newsImage в список newsImages newsImages.Add(newsImage); } } // Если в процессе выполнения не возникло ошибок, сохраняем всё в БД if (newsImages != null && newsImages.Count > 0) { await cmsDB.NewsImages.AddRangeAsync(newsImages); } await cmsDB.News.AddAsync(news); await cmsDB.SaveChangesAsync(); // Редирект на главную страницу return(RedirectToAction("Index", "News")); } // Возврат модели в представление в случае, если запорится валидация return(View(model)); }
public bool Update(NewsImage news) { return(NewsImageDao.Update(news)); }