Ответ 1
Существует два простых способа сделать изображения: один - просто вернуть изображение в контроллер:
[HttpGet]
[AllowAnonymous]
public ActionResult ViewImage(int id)
{
var item = _shoppingCartRepository.GetItem(id);
byte[] buffer = item.Picture;
return File(buffer, "image/jpg", string.Format("{0}.jpg", id));
}
И представление просто ссылается на него:
<img src="Home/ViewImage/10" />
Кроме того, вы можете включить его в ViewModel:
viewModel.ImageToShow = Convert.ToBase64String(item.Picture);
и в представлении:
@Html.Raw("<img src=\"data:image/jpeg;base64," + viewModel.ImageToShow + "\" />");
Для хранилища данных вы просто должны использовать массив байтов (varbinary(max)
) или blob или любой совместимый тип.
Загрузка изображений
Здесь объект с именем HeaderImage
является EntityFramework EntityObject. Контроллер будет выглядеть примерно так:
[HttpPost]
public ActionResult UploadImages(HttpPostedFileBase[] uploadImages)
{
if (uploadImages.Count() <= 1)
{
return RedirectToAction("BrowseImages");
}
foreach (var image in uploadImages)
{
if (image.ContentLength > 0)
{
byte[] imageData = null;
using (var binaryReader = new BinaryReader(image.InputStream))
{
imageData = binaryReader.ReadBytes(image.ContentLength);
}
var headerImage = new HeaderImage
{
ImageData = imageData,
ImageName = image.FileName,
IsActive = true
};
imageRepository.AddHeaderImage(headerImage);
}
}
return RedirectToAction("BrowseImages");
}
Вид будет выглядеть примерно так:
@using (Html.BeginForm("UploadImages", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="row">
<span class="span4">
<input type="file" name="uploadImages" multiple="multiple" class="input-files"/>
</span>
<span class="span2">
<input type="submit" name="button" value="Upload" class="btn btn-upload" />
</span>
</div>
}