Ejemplo n.º 1
0
        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"));
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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");
 }
Ejemplo n.º 5
0
        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;
            }
        }
Ejemplo n.º 6
0
        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);
 }
Ejemplo n.º 8
0
 public bool Add(NewsImage a)
 {
     if (DbHelperSQL.Insert(a))
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Ejemplo n.º 9
0
 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);
        }
Ejemplo n.º 11
0
        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));
        }
Ejemplo n.º 12
0
        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);
 }
Ejemplo n.º 14
0
        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);
            //}
        }
Ejemplo n.º 15
0
 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);
 }
Ejemplo n.º 17
0
        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();
        }
Ejemplo n.º 18
0
 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));
 }
Ejemplo n.º 19
0
        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();
        }
Ejemplo n.º 20
0
        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);
            }
        }
Ejemplo n.º 21
0
        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();
            }
        }
Ejemplo n.º 22
0
        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();
        }
Ejemplo n.º 23
0
        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));
        }
Ejemplo n.º 24
0
        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>");
            }
        }
Ejemplo n.º 25
0
        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>");
            }
        }
Ejemplo n.º 26
0
        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"));
            }
        }
Ejemplo n.º 27
0
        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));
        }
Ejemplo n.º 28
0
 public bool Add(NewsImage newsimage)
 {
     return(NewsImageDao.Add(newsimage));
 }
Ejemplo n.º 29
0
        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));
        }
Ejemplo n.º 30
0
 public bool Update(NewsImage news)
 {
     return(NewsImageDao.Update(news));
 }