Как загрузить имя изображения в базу данных с помощью ASP.NET MVC? - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь создать галерею фильмов в MVC , и у меня есть следующий алгоритм:

  1. Сохранить изображение на сервере в определенной папке. Path.Combine(Server.MapPath("~/Images"), Path.GetFileName(archivo.FileName));
  2. и сохранить имя изображения в базе данных. (не полный путь, как Hello.jpg ).
  3. В View просто покажите их, набрав <img src="/Images/@MovieGallery.Imagen"/>, используя цикл foreach.

(Пожалуйста, исправьте меня, если мой алгоритм не работает)

А это мой код:

Контроллер

        [HttpPost]
    public ActionResult Peliculas_Agregar(pelicula pelis)  {

        string path="";
        HttpPostedFileBase archivo = Request.Files["Imagen"]; // @name= file, capturo el name


            if (ModelState.IsValid) { // Validar si son validos los campos segun DBSET
                    try
                    {

                        if (archivo != null && archivo.ContentLength > 0) { //El nombre del archivo debe ser mayor que 0 y no debe ser nulo
                            try
                            {
                                path = Path.Combine(Server.MapPath("~/Images"), Path.GetFileName(archivo.FileName));
                                archivo.SaveAs(path);

                    }
                    catch (Exception ex) {
                                ViewBag.ErrorArchivo = ex;
                            }
                        }

                        Cine.peliculas.Add(pelis);
                        Cine.SaveChanges();
                    }
                catch (Exception ex){
                        ViewBag.Error = ex;
                    }

            }
        return View(pelis);
    }

Модель (Создано Entity Framework)

 public int id_peli { get; set; }
    public string titulo { get; set; }
    public string director { get; set; }
    public string cast { get; set; }
    public string descripcion { get; set; }
    public Nullable<int> duracion { get; set; }
    public string categoria { get; set; }
    [DataType(DataType.Upload)]
    [Display(Name = "Cargar imagen")]
    //[Required(ErrorMessage = "Por favor carga una imagen")]
    public string imagen { get; set; } // here is where i want to save files name, not the path.

View

@using (Html.BeginForm("Peliculas_Agregar", "Admin", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken()
    <div class="Formas">
        <div class="form-group">
            @Html.LabelFor(m => m.titulo, new { htmlAttributes = new { @for = "exampleTittle" } })
            @Html.EditorFor(m => m.titulo, new { htmlAttributes = new { @placeholder = "Título", @class = "form-control"} })
        </div>
        <div class="form-group">
            <input type="file" name="Imagen" />
        </div>
    </div>
    <input type="submit" value="Agregar Película" class="btn btn-outline-primary" />
}

Мой код работает ОК , но основная проблема, с которой я сталкиваюсь, заключается в том, что я не могу или не знаю, как сохранить имя изображения в базе данных , потому что Я не получаю имя строки изображения, которое входит в параметр. Я просто получаю строку или тип, называемый System.Web.HttpPostedFileWrapper : System.Web.HttpPostedFileWrapper

Я думаю, это потому, что я использую HttpPostedFileBase , чтобы сохранить изображение на сервере, но я не могу отредактировать его и сохранить только имя изображения на сервере. Не могу сделать обе вещи. Как я мог решить это?

1 Ответ

0 голосов
/ 09 мая 2019

Следуя двум понравившимся ответам, мы используем модель представления для публикации формы и файла. Затем мы сопоставляем поля виртуальной машины с полями сущности перед выполнением действий с базой данных.

Модель сущности

public class Movie
{
    public string Title { get; set; }
    public string FileName { get; set; }
}

Создание модели представления для захвата значений формы

public class MovieVM
{
    public string Title { get; set; }

    [Display(Name = "Upload Image")]
    public HttpPostedFileBase Image { get; set; }
}

Действие принимает MovieVM вместо сущности

[HttpPost]
public ActionResult UploadMovie(MovieVM model)
{
    if (ModelState.IsValid)
    {
        // save file
        // ...

        // Map to Entity to save to db
        Movie movie = new Movie
        {
            Title = model.Title,
            FileName = model.Image.FileName
        };

        db.Movies.Add(movie);
        db.SaveChanges();

        return RedirectToAction("Success");
    }
    return View(model);
}
  1. Загрузить изображение, включенное в модель MVC
  2. Что такое ViewModel в MVC?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...