У меня есть загрузка изображений в моей форме:MVC 3 Изображение не загружено
@using (Html.BeginForm("Create", "Application", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Application Under Testing</legend>
<div class="editor-label">
Image
</div>
<div class="editor-field">
@if (Model.AppDetails.Image == null)
{
@:None
} else {
<img width="400" src="@Url.Action("GetImage", "Application", new { Model.AppDetails.ID })" />
}
<div>Upload new image: <input type="file" name="Image" /></div>
</div>
</fieldset>
}
Это представляет его, и он будет сохранен в базе данных с помощью:
[HttpPost]
public ActionResult Create(ApplicationViewModel vm, HttpPostedFileBase image)
{
if (ModelState.IsValid)
{
if (image != null)
{
vm.AppDetails.ImageMimeType = image.ContentType;
vm.AppDetails.Image = new byte[image.ContentLength];
image.InputStream.Read(vm.AppDetails.Image, 0, image.ContentLength);
}
_repository.SaveEntity<AUT>(vm.AppDetails);
return RedirectToAction("Index");
}
return View(vm);
}
Итак, теперь у меня есть действие, которое получает изображение из базы данных для отображения:
public FileContentResult GetImage(Guid appID)
{
var app = _repository.AUTs.FirstOrDefault(x => x.ID.Equals(appID));
if (app == null)
{
return null;
}
return File(app.Image, app.ImageMimeType);
}
на мой взгляд, у меня есть этот код, чтобы показать изображение:
<td>
@if (item.Image == null)
{
@:None
} else {
<img width="100" src="@Url.Action("GetImage", "Application", new { item.ID })" />
}
</td>
Выход на веб-странице это:
<img width="100" src="/Validation/Application/GetImage/bd3fdb5b-8d73-48e2-a04e-1a49a73729be">
Это не отображается изображение. EDIT: Я действительно проверил элемент в Chrome, и он имеет 2 ошибки (по 1 для каждого изображения): Ошибка 500 Внутренняя ошибка сервера. И он показывает URL-адрес для getimage, стоит ли использовать полный URL-адрес? или что-то?
Так что я предполагаю, что он либо не сохраняет правильные данные в базе данных, либо правильно считывает данные в формат изображения. Или где-то мой код неправильный.
Любые мысли?
--- EDIT ---
Я запустить юнит-тесты на это, чтобы увидеть, если я могу получить изображение. Тест вернулся.
Таким образом, это должно быть связано с визуализацией его на стороне клиента, поскольку серверная сторона, похоже, работает нормально. Chrome показывает ошибку: 500 Внутренняя ошибка сервера.
Вы отлаживали свой код? Что происходит в методе GetImage? Он находит изображение? – nemesv
Ну что ж, я попытался поставить точку останова в получении изображения, он не попадет ... –
Это может помочь: http://stackoverflow.com/questions/8474822/displaying-database-image-bytes- in-razor-mvc3 –