Если изображения довольно маленькие, вы можете отправить их в формате Base64 с кодировкой веб-страницы.
Обратите внимание : Это только демонстрация, чтобы показать, что это возможно, я не думаю, что это следует делать на реальном веб-сайте.
На самом деле вы должны:
- рассмотрим запись этих образов на диск и их использование в качестве обычных изображений с надлежащими заголовками кэширования, не обращаясь к базе данных каждый раз.
- реализует обработчик , который сначала проверяет, существует ли изображение на диске, и извлекает его из БД только при необходимости (это будет только первый раз, когда запрашивается изображение).
- использовать перезапись URL и передавать обработчику только те URL-адреса изображений, которые не соответствуют изображению на диске. Это быстрее, чем пропускать все запросы через канал ASP.Net. IIRF делает это на отлично.
Это говорит о том, что здесь демонстрация с закодированными в base64 изображениями.
Добавьте Ретранслятор на свою страницу:
<asp:Repeater ID="ImageRepeater" runat="server">
<ItemTemplate>
<asp:Literal ID="ltImage" runat="server"><img src="data:image/jpg;base64,{0}" alt="" /></asp:Literal>
</ItemTemplate>
</asp:Repeater>
В своем коде привязать изображения к повторителю:
private void BindImages(System.Drawing.Image[] images)
{
this.ImageRepeater.DataSource = images;
this.ImageRepeater.ItemDataBound += delegate(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
System.Drawing.Image img = e.Item.DataItem as System.Drawing.Image;
Literal lt = e.Item.FindControl("ltImage") as Literal;
lt.Text = string.Format(lt.Text, ImageToBase64(img, ImageFormat.Jpeg));
}
};
this.ImageRepeater.DataBind();
}
private string ImageToBase64(System.Drawing.Image image, System.Drawing.Imaging.ImageFormat format)
{
using (MemoryStream ms = new MemoryStream())
{
// Convert Image to byte[]
image.Save(ms, format);
byte[] imageBytes = ms.ToArray();
// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}
Возможно, вы захотите отключить Viewstate ...
Спасибо dailycoding.com и Дину Эдвардсу за биты кода.