Я пытаюсь создать галерею фильмов в MVC , и у меня есть следующий алгоритм:
- Сохранить изображение на сервере в определенной папке.
Path.Combine(Server.MapPath("~/Images"), Path.GetFileName(archivo.FileName));
- и сохранить имя изображения в базе данных. (не полный путь, как Hello.jpg ).
- В 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 , чтобы сохранить изображение на сервере, но я не могу отредактировать его и сохранить только имя изображения на сервере. Не могу сделать обе вещи. Как я мог решить это?