// GET: Article public ActionResult Index() { var allArticles = repository.GetAll(); List <ArticlePreview> articlePreviews = new List <ArticlePreview>(); foreach (var article in allArticles) { var articlePreview = new ArticlePreview { Article = article }; articlePreviews.Add(articlePreview); } return(View(articlePreviews)); }
public async Task <IActionResult> UploadAtricleImage(ImageUploadRequest request) { return(await MethodWrapper(async (param) => { if (param == null) { return BadRequest(); } if (!int.TryParse(param.Id, out int articleId) || !bool.TryParse(param.IsDefault, out bool isDefaultImage)) { return BadRequest(); } string fileName = $"{param.Id}_{param.Image.FileName}"; // путь к папке Files string path = $"/Images/{fileName}"; if (System.IO.File.Exists(HostingEnvironment.WebRootPath + path)) { ModelState.AddModelError("error", "Картинка уже была загружена."); return BadRequest(ModelState); } // сохраняем файл в папку Files в каталоге wwwroot using (var fileStream = new FileStream(HostingEnvironment.WebRootPath + path, FileMode.Create)) { await param.Image.CopyToAsync(fileStream); } TorImage file = new TorImage { ArticleId = articleId, Name = param.Image.FileName, LocalPath = path, IsDefault = isDefaultImage }; Context.Images.Add(file); await Context.SaveChangesAsync(); file.ExternalPath = $"{Request.Scheme}://{Request.Host.Value}/api/images/{file.Id}"; Context.Images.Update(file); await Context.SaveChangesAsync(); if (isDefaultImage) { ArticlePreview articlePreview = await Context.Previews.FirstOrDefaultAsync(pre => pre.ArticleID == articleId); // if exist old default image- remove it if (!string.IsNullOrEmpty(articlePreview.DefaultImagePath)) { string oldDefaultStr = articlePreview.DefaultImagePath.Split('/').LastOrDefault(); TorImage image = await Context.Images.FirstOrDefaultAsync(pre => pre.Id == int.Parse(oldDefaultStr)); System.IO.File.Delete(HostingEnvironment.WebRootPath + image.LocalPath); Context.Images.Remove(image); await Context.SaveChangesAsync(); } articlePreview.DefaultImagePath = file.ExternalPath; Context.Update(articlePreview); await Context.SaveChangesAsync(); } return Ok(); }, request)); }