2016-04-11 1 views
-1

У меня есть этот код в View:Сохранение изображения в базе данных с ASP.NET MVC

<div class="form-group"> 
    <label for="imageFile">Image</label> 
    <input type="image" name="imageFile" class="file-loading form-control input-files" accept=".png,.jpg,.jpeg,.gif,.tif" /> 
    @Html.ValidationMessageFor(model => model.image) 
</div> 

Контроллер:

public ActionResult PostIdea(PostIdeaViewModel model, HttpPostedFileBase imageFile) { 
    if (ModelState.IsValid) { 
     var newProject = db.Projects.Create(); 
     if (imageFile != null && imageFile.ContentLength > 0) { 
     newProject.image = new byte[imageFile.ContentLength]; 
     imageFile.InputStream.Read(newProject.image, 0, imageFile.ContentLength); 
     } 
    } 
} 

Модель:

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

Все кажется мне правильным, но изображение, полученное контроллером, равно нулю. Что-то не так с кодом?

Edit: с помощью ENCTYPE = "многочастных/форм-данных" и @ Html.TextBoxFor (м => m.image, новый {типа = "файл"}) работало для меня.

+0

Что поиска для "HttpPostedFileBase нулевой" выход? Как выглядит ваш код формы? – CodeCaster

+0

На основе вашей модели вы должны иметь '@ Html.TextBoxFor (m => m.image, new {type =" file "})' –

+0

@StephenMuecke с использованием Html.TextBoxFor дает это исключение: вход недействителен Строка Base-64, поскольку она содержит не-базовый символ 64, более двух пробельных символов или недопустимый символ среди символов заполнения. Я не мог ее решить, поэтому попробовал другую оценку. – Resham

ответ

0

Я думаю, вы должны использовать тип ввода «файл». и добавьте тип ввода «submit».

Мой Вид:

@using (Html.BeginForm("TestImage", "Test", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    <div class="form-group"> 
     <label for="imageFile">Image</label> 
     <input type="file" name="imageFile" class="file-loading form-control input-files" accept=".png,.jpg,.jpeg,.gif,.tif" /> 
    </div> 
    <button type="submit">Go !</button> 
} 

Мой контроллер:

 [HttpPost] 
    public ActionResult TestImage(Models.Answer model) 
    { 
     var imageFiles = Request.Files; 

     if (imageFiles != null && imageFiles.Count > 0) 
     { 
      HttpPostedFileBase imageFile = imageFiles[0]; 
      if (imageFile.ContentLength > 0) 
      { 
       var image = new byte[imageFile.ContentLength]; 
       imageFile.InputStream.Read(image, 0, imageFile.ContentLength); 
      } 
     } 

     return View(); 
    } 
0

Ваше мнение HTML должен быть заключен в

@using (Html.BeginForm("Action", "Controller", null, FormMethod.Post, new {enctype = "multipart/form-data"})) 
{ 
    <input type="image" name="imageFile" class="file-loading form-control input-files" accept=".png,.jpg,.jpeg,.gif,.tif" /> 

    <input type ="submit" value="Upload"/> 
} 

многоголосных/форма -data Никакие символы не кодируются. Это значение необходимо при использовании форм, которые имеют контроль загрузки файла

+0

он дает тот же результат ... – Resham

+0

- ваш код, указанный в теге формы с указанными атрибутами –

+0

да, это ..... – Resham

0

Ваша форма должна иметь ENCTYPE = «многослойные/форму-данные»

+0

он дает тот же результат ... – Resham

0

типа = «образ» только определяет, что изображение кнопки отправки а не как входной сигнал, который может быть отправлен серверу.

Вы должны использовать входной файл типа для вашего случая

Смежные вопросы