Как мне перезаписать .jpg с байтовым массивом из MSSMS в ASP. NET? - PullRequest
0 голосов
/ 01 апреля 2020

Я пытался использовать материал из System.Drawing, но он недоступен с ASP. NET. Я пробовал File.Copy(), но это также не доступно. Любая помощь приветствуется.

это соответствующий код


var fileDetailExpanded = await _context.FileDetails.SingleOrDefaultAsync(m => m.FileDetailID == id);
if (fileDetailExpanded == null)
{
     return NotFound();
}
byte[] fileBytes = fileDetailExpanded.File;
string fileExt = fileDetailExpanded.FileType;

/* src = "~/images/displayImage.jpg */

1 Ответ

0 голосов
/ 02 апреля 2020

Так что обычно в ASP. NET Core MVC мы создадим специальный метод действия, единственная задача которого - вернуть изображение.

public ActionResult ProductImage(int id)
{
    var fileInfo = //get this object from the database based on the id, looks like you already know how
    return File(fileInfo.TheByteArray, fileInfo.MimeType);
}

В приведенном выше коде я при условии, что у вас есть объект fileInfo, который содержит байтовый массив, представляющий изображение, и MIME-тип изображения (если у вас есть только расширение файла, вы можете просто реализовать метод для преобразования от расширения до типа MIME). Вероятно, у вас будут разные имена свойств, соответственно измените код. Этот метод действия собирается записать изображение непосредственно в ответ, причем тип MIME передается в качестве типа контента.

Нажав этот URL-адрес для изображения, вы сможете увидеть изображение в браузере. Тогда единственный оставшийся шаг - установить элемент изображения на странице Razor так, чтобы он указывал на это местоположение. Я предполагаю, что ваша модель имеет свойство FileId, представляющее файл, который вы хотите, чтобы пользователь увидел.

<img src="/MyController/ProductImage/@Model.FileId" />

Обратите внимание, что получение изображения с сервера и его возврат при каждом посещении этой страницы может быть не супер эффективный, так что вы можете посмотреть различные варианты кэширования .

...