Cześć :) chciałbym się was zapytać o co chodzi ponieważ mam jakiś dziwny błąd z edytowaniem zdjęcia.
Gdy wgrywam jakiekolwiek zdjęcie z jakimkolwiek rozszerzeniem przy tworzeniu elementu MenuItem wszytko gra. Mogę je później edytować i zmieniać do woli.
Problem pojawia się gdy zdjęcie nie zostanie wgrane przy tworzeniu i użyje domyślnego które znajduje się już w katalogu.
Po próbach testów zauważyłem że gdy zdjęcie domyślne jest w formacie .jpg i później chcemy je zmienić na zdjęcie .png wyświetla dobrze, jednak gdy chcemy zamienić zdjęcie domyślne na zdjęcie .jpg, wyświetla dalej zdjęcie domyślne, mimo że w samym katalogu zostało zamienione, jednak już na samej stronie widnieje inne zdjęcie.
I odwrotna sytuacja, gdy domyślne jest .png to wyświetla ładnie .jpg ale nie wyświetla znowu .png mimo że w katalogu też się podmienia.
Program robię z kursem na Udemy, modyfikuję go i dodaję nowe elementy do swojego tematu strony, jednakże wgrywanie zdjęć jest kropka w kropke, co prawda nie jest w kursie dokładnie pokazane czy tam działa ponieważ tam tylko pokazane jest jak podmienia zdjęcie domyśle .png na zdjęcie .jpg.
Byłbym niezmiernie wdzięczny gdyby ktoś mógł mi coś poradzić z tym problemem, z góry dziękuję ślicznie :)
A oto trochę kodu:
//Post - Create
[HttpPost,ActionName("Create")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> CreatePost()
{
if(!ModelState.IsValid)
{
return View(MenuItemVM);
}
_context.MenuItem.Add(MenuItemVM.MenuItem);
await _context.SaveChangesAsync();
string webRootPath = _hosting.WebRootPath;
var files = HttpContext.Request.Form.Files;
var menuItemFromDB = await _context.MenuItem.FindAsync(MenuItemVM.MenuItem.Id);
if(files.Count>0)
{
var uploads = Path.Combine(webRootPath, "img");
var extension = Path.GetExtension(files[0].FileName);
using (var flieStream = new FileStream(Path.Combine(uploads, MenuItemVM.MenuItem.Id + extension), FileMode.Create))
{
files[0].CopyTo(flieStream);
}
menuItemFromDB.Image = @"\img\" + MenuItemVM.MenuItem.Id + extension;
}
else
{
var uploads = Path.Combine(webRootPath, @"img\" + "default_book.jpg");
System.IO.File.Copy(uploads, webRootPath + @"\img\" + MenuItemVM.MenuItem.Id + ".jpg");
menuItemFromDB.Image = @"\img\" + MenuItemVM.MenuItem.Id + ".jpg";
}
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
//Post - Edit
[HttpPost, ActionName("Edit")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> EditPost(int? id)
{
if(id == null)
{
return NotFound();
}
if (!ModelState.IsValid)
{
return View(MenuItemVM);
}
string webRootPath = _hosting.WebRootPath;
var files = HttpContext.Request.Form.Files;
var menuItemFromDB = await _context.MenuItem.FindAsync(MenuItemVM.MenuItem.Id);
if (files.Count > 0)
{
var uploads = Path.Combine(webRootPath, "img");
var extension_new = Path.GetExtension(files[0].FileName);
var imgToDel = Path.Combine(webRootPath, menuItemFromDB.Image.TrimStart('\\'));
if(System.IO.File.Exists(imgToDel))
{
System.IO.File.Delete(imgToDel);
}
using (var flieStream = new FileStream(Path.Combine(uploads, MenuItemVM.MenuItem.Id + extension_new), FileMode.Create))
{
files[0].CopyTo(flieStream);
}
menuItemFromDB.Image = @"\img\" + MenuItemVM.MenuItem.Id + extension_new;
}
menuItemFromDB.Name = MenuItemVM.MenuItem.Name;
menuItemFromDB.Description = MenuItemVM.MenuItem.Description;
menuItemFromDB.Price = MenuItemVM.MenuItem.Price;
menuItemFromDB.CategoryId = MenuItemVM.MenuItem.CategoryId;
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}