Изображение сохраняется как байтовый массив в базе данных.Так что ваш звонок
article.image = Convert.ToString(postedFile.ContentLength);
не имеет смысла, если вы хотите сохранить реальное изображение.Вам нужно сделать что-то вроде этого:
var ms = new MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); //Specify format here; (image is of type System.Drawing.Image)
article.image = ms.ToArray();
Ваше свойство изображения должно иметь тип byte[]
, а столбец базовой базы данных должен быть VARBINARY
.
РЕДАКТИРОВАТЬ: Вы получаете ошибку, потому что image
должен быть типа System.Drawing.Image
, как указано в комментариях.Если вы не можете использовать это (или не хотите), вам нужно извлечь массив байтов из 'HttpPostedFileBase' следующим образом:
var ms = new MemoryStream();
postedFile.InputStream.CopyTo(ms);
article.image = ms.ToArray();
Когда вы все это сделаете, вы можете отобразить изображение наВаше представление выглядит так:
Создайте новое действие, которое возвращает изображение для каждой статьи
public ActionResult GetImage(int id)
{
var article = db.Articles.First(i => i.Id == id);
return File(article.image, "image/png"); //Adjust content type based on image type (jpeg, gif, png, etc.)
}
Заменитькод вашего просмотра, чтобы получить изображение от этого действия.
Измените
`@Html.EditorFor(model => model.image, new {htmlAttributes = new { @class = "form-control" ,@type="file" } }`
на
`<img src="@Url.Action("Index", "Images", new { id = Model.Id })" />`
Обратите внимание, что этоне сделает изображение редактируемым.Вам лучше задать новый вопрос, если вам нужна эта функциональность, так как этот ответ уже выходит за рамки вашего первоначального вопроса.