Я просматривал почти все посты на этом сайте, но кажется, что они связаны с загрузкой изображений и сохранением их в базе данных sql-сервера, однако кое-что, что я делаю, все еще не правильно.
Изображение либо неправильно сохраняется, либо извлекается из базы данных правильно, так как во время записи / извлечения байтов изображение недопустимо. При сравнении размера загруженного изображения с оригиналом размер отличается (больше)?
Модель
public byte[] Photo { get; set; }
public string PhotoMimeType { get; set; }
public string PhotoName { get; set; }
Sql Server :
[PhotoMimeType] [nvarchar](50) NULL,
[PhotoName] [nvarchar](50) NULL,
[Photo] [image] NULL,
В контроллере у меня есть следующее для сохранения изображения :
public ActionResult Edit(AgentInfo modifiedAgent, HttpPostedFileBase postedFile)
{
if(ModelState.IsValid)
{
var model = _agentRepository.GetByID(modifiedAgent.AgentID);
if (TryUpdateModel(model))
{
if (postedFile != null)
{
int imageLength = postedFile.ContentLength;
byte[] imgBytes = new byte[imageLength];
postedFile.InputStream.Read(imgBytes, 0, imageLength);
model.PhotoMimeType = postedFile.ContentType;
model.PhotoName = postedFile.FileName;
model.Photo = imgBytes;
}
_agentRepository.Save(model);
return RedirectToAction("ManageAgents", "Agent");
}
}
return View("Edit", modifiedAgent);
}
Поиск :
[HttpGet]
public ActionResult GetImage(int id)
{
var agent = _agentRepository.GetByID(id);
return File(agent.Photo, agent.PhotoMimeType, agent.PhotoName);
}
Дисплей :
<img src='@Url.Action("GetImage", "Agent", new { id = Model.AgentID })' />
EDIT:
Ну, подумав, что это была проблема с тем, как я все это проводил, оказалось, что это сопоставления моей базы данных ..... frick
Кстати, если при отображении с помощью fluent-nhibernate требуется сохранить байты изображения, тип данных sql является varbinary (max) со следующим отображением:
Map(x => x.Photo).Column("Photo").Length(2147483647).CustomSqlType("varbinary(MAX)");