Мой сценарий таков:
Я создаю пользовательский отчет на основе хранимой процедуры, которая возвращает три столбца (person_id [long], name [varchar (100)], age [int], photo [image]). Это столбцы и типы в моей таблице базы данных.
Сейчас я использую что-то подобное для каждого изображения отчета.
<img src="<%= Url.Action("ShowImage", "Reports", new {personId = result["PERSON_ID"]}) %>" />
с ShowImage, равным
public virtual ActionResult ShowImage(long? personId)
{
try
{
if (personId.HasValue)
{
byte[] imageArray = StudentClient.GetPersonPhotoById(personId.Value);
if (imageArray == null)
return File(noPhotoArray, "image/jpg");
#region Validate that the uploaded picture is an image - temporary code
// Get Mime Type
byte[] buffer = new byte[256];
buffer = imageArray.Take(imageArray.Length >= 256 ? 256 : imageArray.Length).ToArray();
var mimeType = UrlmonMimeType.GetMimeType(buffer);
if (String.IsNullOrEmpty(mimeType) || mimeType.IndexOf("image") == -1)
return File(noPhotoArray, "image/jpg");
#endregion
return File(imageArray, "image/jpg");
}
}
catch
{
return File(noPhotoArray, "image/jpg");
}
}
Я хотел бы использовать какую-то альтернативу, потому что это очень напряженно из-за того, что ShowImage () вызывает метод службы StudentClient.GetPersonPhotoById (personId.Value); за каждую отдельную картинку, что означает множество вызовов для службы и БД.
Я бы хотел использовать этот столбец фотографий, который возвращает массив байтов, вместо использования столбца Person_id с помощью метода контроллера ShowImage.
Это практически уменьшит количество обращений к службе до 0 и будет использовать фактические данные из столбца изображения. Это кажется довольно простым, но я изо всех сил пытаюсь найти решение.
Спасибо!