Вы должны возвращать двоичные большие объекты («BLOB», как правило, все, что больше, чем килобайт или около того) в отдельном запросе - это имеет многочисленные преимущества, но основными причинами являются
- Браузерыможет кэшировать отдельные ответы и изображения.
- Их можно передавать напрямую, без их кодирования, используя неэффективный формат, такой как Base64 (который эффективно использует 1 байт для передачи 6 бит данных).
Принимая во внимание, что использование data:
URI для включения изображений, встроенных в страницу, расточительно, потому что данные изображения необходимо загружать и кодировать в Base64 при каждом запросе. По возможности избегайте дискового ввода-вывода (кроме того, ваш код не использует асинхронный ввод-вывод, поэтому он особенно неэффективен).
В ASP.NET MVC и ASP.NET Core определите новое действие для обработки запросов к изображениям:
[HttpGet("images/{imageName}")]
public ActionResult GetImage( String imageName )
{
String imagefileName = GetImageFileName( imageName ); // don't forget to sanitize input to prevent directory traversal attacks
// Use `FileResult` to have ASP.NET MVC efficiently load and transmit the file rather than doing it yourself:
return new FilePathResult( imagefileName, "image/jpeg" ); // assuming all images are JPEGs.
}
На вашей странице используйте элемент <img />
, например, так:
<img src="@( this.Url.Action("GetImage", new { imageName = "foo" } ) )" />
В ASP.NET WebForms вам нужно будет использовать вместо *.ashx
, ноПринцип тот же.