Hirdetés
- Izmos kis "2 az 1-ben" MoDT alaplapot villantott a Minisforum
- Az Enermax tényleg nem viccel, ha az új tápjának garanciaidejéről van szó
- Egybegép lesz vagy ház? A Corsair sem tudja eldönteni.
- A Qwertykeys új klaviatúrái szépek, igényesek és sokrétűek
- Összement a mosásban az ASUS új VGA-inak PCI Express 5.0 csatlakozója
- Milyen TV-t vegyek?
- OLED TV topic
- Billentyűzet-választó: mechanikus vs membrános – kinek melyik a jobb?
- Projektor topic
- Azonnali fotós kérdések órája
- És akkor a memóriapánik után beköszöntött a HDD-pánik
- Androidos fejegységek
- Összement a mosásban az ASUS új VGA-inak PCI Express 5.0 csatlakozója
- Milyen egeret válasszak?
- Lenovo Legion Go: a legsokoldalúbb kézikonzol
Új hozzászólás Aktív témák
-
joysefke
veterán
válasz
martonx
#8580
üzenetére
Nem, azt még nem próbáltam ki.
Alapvetően én ezt az IFormFile-t akarom validálni, maga a model objektumom (Person) nem túl kritikus, annak a propertijeit az osztálydeklarációban dekoráltam [Required]-del, az a része működik és nekem egyelőre elég is.
Dobtam a mai próbálkozásomat (elnapoltam) a kontrollert visszaállítottam a naiv, nem túl alapos kézi validálásra. Jelenleg így néz ki, csak annyi a célja az IFormFile validálásnak, hogy figyelmetlenségből ne lehessen rossz formátumot feltölteni. Tudom, hogy a fájl kiterjesztése semmit nem jelent.
A Person egy ViewModel objektum és tárolja egy személy adatait illetve a képének a relatív útvonalát a wwwroot-hoz képest. Összesen kb 6-10 Person objektum lesz, ezek in-memory tárolódnak (és minden változás mentődik a diszkre). Ők nem userek, hanem csupán koszorúslányok-fiúk, a képük-nevük pedig a Weblapon fog virítani. Az admin egyszer konfigurálja őket a content-manager oldalon utána ezek úgy maradnak.
A dolog nincsen túlságosan kitesztelve, de működik.
[HttpPost] public IActionResult EditPerson(Person model, int id, IFormFile file)
{
// Text based informations (Person object) and IFormFile gets validated separatelly
// The expectation is to execute EditPerson if the Person is valid, even if IFormFile is missing or invalid
// Exceptions can only be raised bc of file IO errors. This should not break the method
// we collect the exceptions to log details later into ModelState
IList<Exception> exceptions = new List<Exception>();
if (id < 0 || store.Data.People.Length <= id) ModelState.AddModelError("", "Error: route variable \"id\" has invalid value");
if (model?.Title != "Groomsmen" && model?.Title != "Bridesmaid") ModelState.AddModelError("", "Http post request contains invalid title: must be \"Bridesmaid\" or \"Groomsmen\"");
if (ModelState.IsValid)
{ // Person object is valid and updates the ContentStore no matter the IFormFile state
store.Data.People[id] = model;
store.Update(store.Data.People);
} // IFormFile gets manually validated
if (file != null)
{
string name = file.FileName;
string ext = Path.GetExtension(file.FileName.ToLower());
if (1024 * 1024 < file.Length) ModelState.AddModelError("", "Error: A maximum image size of 1MB allowed");
if (ext != ".jpeg" && ext != ".jpg") ModelState.AddModelError("", "Error: JPEG file expected extension must be either *.jpeg or *.jpg");
if (ModelState.IsValid)
{
// currently no renaming and no protection against malicious IFileForm-s as file upload is not available for public
string newFileName = file.FileName;
string newFileFullPath = Path.Combine(webRoot, imageFolder, newFileName);
while (System.IO.File.Exists(newFileFullPath))
{
//gets a nice, short random file name in case of a filename conflict
newFileName = (DateTime.Now.Ticks % 1000).ToString() + ext;
newFileFullPath = Path.Combine(webRoot, imageFolder, newFileName);
}
try
{
using (FileStream fs = System.IO.File.Create(newFileFullPath))
{
file.CopyTo(fs);
fs.Flush();
// file path gets saved in cshtml friendly relative path
store.Data.People[id].PictureSrc = "/" + imageFolder + "/" + newFileName;
}
}
catch (Exception ex) { exceptions.Add(ex); }
}
if (0 < exceptions.Count)
{
ModelState.AddModelError("", "Error: Could not upload image");
foreach (var ex in exceptions) ModelState.AddModelError("", ex.Message);
}
else store.Update(store.Data.People);
}
if (ModelState.IsValid) return RedirectToAction(nameof(Index));
else
{ ViewBag.id = id;
return View(model);
}
}
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Derült égből villámcsapás: vége a Ford elektromos kalandjának
- Autós topik
- Robotporszívók
- sziku69: Szólánc.
- Teljes verziós játékok letöltése ingyen
- Okosóra és okoskiegészítő topik
- Luck Dragon: Asszociációs játék. :)
- Spórolós topik
- Milyen TV-t vegyek?
- sziku69: Fűzzük össze a szavakat :)
- További aktív témák...
- Itt az igazi AJÁNDÉK ÁR! - ÚJ, bontatlan Macbook Air 16/256GB AZONNAL! - Midnight
- Samsung Galaxy S10 512GB, Kártyafüggetlen, 1 Év Garanciával
- Samsung Galaxy S24 Ultra 5G 512GB, Kártyafüggetlen, 1 Év Garanciával
- Apple iPhone 13 128GB, Kártyafüggetlen, 1 Év Garanciával
- I7-8700-RTX 4060, csere érdekel.
- Általános igazgatóhelyettes tábla üvegből eladó
- ÚJ HP Victus 15 - 15.6" FHD IPS 144Hz - Ryzen 5 8645HS - 16GB - 512GB - RTX 4050 - Win11 - 3 év gari
- ÁRGARANCIA!Épített KomPhone i5 12400F 16/32/64GB RAM RTX 5060 Ti 8GB GAMER PC termékbeszámítással
- Fém, összecsukható és kihúzható fotó állvány eladó
- Gamer PC-Számítógép! Csere-Beszámítás! I7 6700K / GTX 1660TI / 16GB / 128GB SSD + 1TB HDD
Állásajánlatok
Cég: ATW Internet Kft.
Város: Budapest
Cég: BroadBit Hungary Kft.
Város: Budakeszi


