problem z zapisaniem obrazka i jego wyświetleniem

0

Witam,chcę pobrać obrazek wraz z tytułem itp. ,obraz zapisac do folderu /images/memy/ a następnie pokazać na ekranie obraz wraz z tytułem itp.
W kontrolerze MemyController mam metode Create która powinna zapisac obraz który bede chciał dodać .Nestety przypuszczam że nie działa poprawnie ponieważ po dodaniu obrazka i wciśnieciu Create nic sięnie dodaje ani do bazy ani do folderu -/images/memy/

[HttpPost]
        public async Task<IActionResult> Create(Memy model, IFormFile fileUpload)
        {
            
            if (ModelState.IsValid)
            {
                string pathImgMemy = "/images/memy/";
                string pathSave = $"wwwroot{pathImgMemy}";
                if (!Directory.Exists(pathSave))
                {
                    Directory.CreateDirectory(pathSave);
                }
                string extFile = Path.GetExtension(fileUpload.FileName);
                string fileName = DateTime.Now.ToString("dd-MM-yyyy-hh-mm-ss") + extFile;
                var path = Path.Combine(Directory.GetCurrentDirectory(), pathSave, fileName);

                using (var stream = new FileStream(path, FileMode.Create))
                {
                    await fileUpload.CopyToAsync(stream);
                }

                DateTime dateNow = DateTime.Now;
                model.coverImg = pathImgMemy + fileName;
                model.releaseDate = dateNow;
                model.modifyDate = dateNow;
                db.Memy.Add(model);
                await db.SaveChangesAsync();
                return Redirect("{controller=Home}/{action=Index}/{id?}");
            }
            return View();
        }

a to model Memy

[Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id_mema { get; set; }
        public string Autor { get; set; }
        [Required]
        public string Title { get; set; }
        public string coverImg { get; set; }
        [Required]
        public string Description { get; set; }
        public string Category { get; set; }
        [Required]
        public DateTime? releaseDate { get; set; }
        public DateTime? modifyDate { get; set; }
        public int? Like { get; set; }
        public int? Dislike { get; set; }
0

Odpal pod debuggerem, postaw breakpoint na tym if, zobacz, czy w ogóle "wchodzi" do niego (czy ModelState.IsValid jest true).
Pokaż też swój kod widoku, może tam coś jest nie tak.

0

sprawdzałem if(ModelState.IsValid) i program nie "wchodzi:w tego if ,dlaczego tak się dzieje?
Vieews->Memy->Create

@model MemeGenerator.Models.Memy
@{
    ViewData["Title"] = "CreateMeme";
}
<h2>CreateMeme</h2>

@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <div class="form-group">
        @Html.LabelFor(model => model.Title, "Tytuł")
        @Html.TextBoxFor(model => model.Title, new { @class = "form-control", placeholder = "podaj tytul" })
        @Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" })
    </div>
    <div class="form-group">
        @Html.LabelFor(model => model.releaseDate, "Data dodania")
        <div class='input-group date' id='dtReleaseDate'>
            @Html.TextBoxFor(model => model.releaseDate, new { @class = "form-control", placeholder = "relasedate" })
            @Html.ValidationMessageFor(model => model.releaseDate, "", new { @class = "text-danger" })
            <span class="input-group-addon">
                <span class="glyphicon glyphicon-calendar"></span>
            </span>
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(model => model.Category, "Gatunek")
        @Html.DropDownListFor(m => m.Category, new List<SelectListItem>
        {
        new SelectListItem { Text="Śmieszne", Value="Śmieszne" },
        new SelectListItem { Text="Poważne", Value="Poważne" },
        new SelectListItem { Text="Głupie", Value="Głupie" }
        }, "Podaj categorie mema", new { @class = "form-control" })
        @Html.ValidationMessageFor(model => model.Category, "", new { @class = "text-danger" })
    </div>
  
    <div class="form-group">
        @Html.Label("fileCoverImg", "Dodaj")
        <input type="file" id="fileUpload" name="fileUpload" class="form-control" />
        <lable class="text-danger">
            @Html.ValidationMessage("errFileUpload")
        </lable>
    </div>
    <div class=form-group>
        <input onclick="return validateOnSubmit()" type="submit" value="CreateMeme" class="btn btn-primary" />
    </div>
    <div>
        <a asp-controller="Home" asp-action="Index">Back to List</a>
    </div>

}

@section Scripts
    {
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js"></script>
    <script type="text/javascript">
        $(function () {
            $('#dtReleaseDate').datetimepicker({
                defaultDate: new Date(),
            });
        });
        function validateOnSubmit() {
            if (!$('#fileUpload').val()) {
                $('span[data-valmsg-for="errFileUpload"]').text('The file upload is required.');
            }

           
            }
        }
    </script>
    <script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.16.0/jquery.validate.min.js"></script>
    <script src="https://ajax.aspnetcdn.com/ajax/jquery.validation.unobtrusive/3.2.6/jquery.validate.unobtrusive.min.js"></script>
}


1

Będzie szybciej:

var errors = ModelState.SelectMany(x => x.Value.Errors.Select(w => w.ErrorMessage));

foreach (var error in errors)
{
    Console.WriteLine(error);
}

Wydaje mi się, że wystarczy użyć jakiegoś innego modelu do wkładania danych niż Memy

0

Trochę nie rozumiem,gdzie to powinienem dodać ? albo co zastąpić tym kodem?

0

Zrobiłeś jak napisałeś i nic nie otrzymałem ,żadnych błędów

0
  [HttpPost]
        public async Task<IActionResult> Create(Memy model, IFormFile fileUpload)
        {
            if (fileUpload == null)
            {
                ModelState.AddModelError("errFileUpload", "The file upload field is required.");
                return View();
            }
           
            if (ModelState.IsValid)
            {
               
                string pathImgMemy = "/images/memy/";
                string pathSave = $"wwwroot{pathImgMemy}";
                if (!Directory.Exists(pathSave))
                {
                    Directory.CreateDirectory(pathSave);
                }
                string extFile = Path.GetExtension(fileUpload.FileName);
                string fileName = DateTime.Now.ToString("dd-MM-yyyy-hh-mm-ss") + extFile;
                var path = Path.Combine(Directory.GetCurrentDirectory(), pathSave, fileName);

                using (var stream = new FileStream(path, FileMode.Create))
                {
                    await fileUpload.CopyToAsync(stream);
                }

                DateTime dateNow = DateTime.Now;
                model.coverImg = pathImgMemy + fileName;
                model.releaseDate = dateNow;
                model.modifyDate = dateNow;
                db.Memy.Add(model);
                await db.SaveChangesAsync();
                return Redirect("{controller=Home}/{action=Index}/{id?}");
            }
            var errors = ModelState.SelectMany(x => x.Value.Errors.Select(w => w.ErrorMessage));

            foreach (var error in errors)
            {
                Console.WriteLine(error);
            }

            return View();
        }

metoda create z MemyController

1 użytkowników online, w tym zalogowanych: 0, gości: 1