Правила Форума редакция от 22.06.2020 |
|
|
|
|
|
Опции темы | Опции просмотра | Language |
|
20.03.2008, 15:55 | #1 |
Неактивный пользователь
Регистрация: 18.03.2008
Сообщений: 5
Репутация: 0
|
Asp.NET Как отобразить изображение на странице, если оно находится в бд?
С помещением в базу и извлечением из базы изображения всё понятно, помещает туда массив битов, а при извлечении этот маммив битов записывается в файл. Но если мне нужно изображение из базы отобразить на web-странице? Неужели нужно сначала в файл его сохранять, а потом помещать на страницу? Это довольно сложно, может кто знает более простой способ? Интересует именно посредством C#.
|
21.03.2008, 14:44 | #2 |
Ответ: Asp.NET Как отобразить изображение на странице, если оно находится в бд?
Записать полученный из базы поток в Responce.OutputStream.
только сначала надо указать Response.ContentType = "image/jpeg". Лучше всего пользоваться HTTP обработчиком (.ashx) тогда можешь вставлять картинку в любое место страницы. <img src="getImage.ashx?параметры"/> т.е. браузер запрашивает файл .ashx а тот возвращает что тебе надо. В данном случае обработчик возвращает просто поток прочитанный из базы. |
|
Сказали спасибо: |
15.04.2008, 12:59 | #3 |
Ответ: Asp.NET Как отобразить изображение на странице, если оно находится в бд?
по своему опыту привожу пример
ProductImage.ashx <%@WebHandlerLanguage="C#"Class="Elis.Rubin.ProductImage" %> using System; using System.Web; using System.Web.Caching; using System.Drawing; using System.Drawing.Imaging; using System.IO; namespace Elis.Rubin { publicclassProductImage : IHttpHandler { publicvoid ProcessRequest(HttpContext context) { // Get the image ID from querystring, and use it to generate a cache key. String imageIDString = context.Request.QueryString["ProductID"]; Guid imageID; try { imageID = newGuid(imageIDString); } catch (Exception) { return; } String cacheKey = String.Format("{0}-{1}", context.Request.CurrentExecutionFilePath, imageID); Byte[] imageBytes; // Check if the cache contains the image. Object cachedImageBytes = context.Cache.Get(cacheKey); if (cachedImageBytes != null) imageBytes = (Byte[])cachedImageBytes; else { // Get image from business layer, and save it into a Byte array as JPEG. ProductsDb products = newProductsDb(); Bitmap bm = products.GetBitmap(imageID); //Get new image width int nBitmapWidth = 0; String sQueryString; try { sQueryString = context.Request.QueryString["width"]; nBitmapWidth = int.Parse(sQueryString); } catch (Exception) { } if (nBitmapWidth == 0) nBitmapWidth = bm.Width; //Get new image height int nBitmapHeight = 0; try { sQueryString = context.Request.QueryString["height"]; nBitmapHeight = int.Parse(sQueryString); } catch (Exception) { } if (nBitmapHeight == 0) nBitmapHeight = bm.Height; Bitmap newBitmap = newBitmap(nBitmapWidth, nBitmapHeight); Graphics g = Graphics.FromImage(newBitmap); //Draw background SolidBrush bgrBrush = newSolidBrush(Color.WhiteSmoke); g.FillRectangle(bgrBrush, newRectangle(0, 0, newBitmap.Width, newBitmap.Height)); float sx = (float)nBitmapWidth / bm.Width; float sy = (float)nBitmapHeight / bm.Height; float scale = Math.Min(sx, sy); g.DrawImage(bm, (newBitmap.Width - scale * bm.Width) / 2, (newBitmap.Height - scale * bm.Height) / 2, scale * bm.Width, scale * bm.Height); MemoryStream stream = newMemoryStream(); newBitmap.Save(stream, ImageFormat.Jpeg); stream.Close(); bm.Dispose(); newBitmap.Dispose(); imageBytes = stream.GetBuffer(); // Store it in the cache (to be expired after 2 hours). context.Cache.Add(cacheKey, imageBytes, null, DateTime.MaxValue, newTimeSpan(2, 0, 0), CacheItemPriority.Normal, null); } // Send back image. context.Response.ContentType = "image/jpeg"; context.Response.Cache.SetCacheability(HttpCacheability.Public); context.Response.BufferOutput = false; context.Response.OutputStream.Write(imageBytes, 0, imageBytes.Length); } publicbool IsReusable { get { returnfalse; } } } } и вывод ---> <ItemTemplate> <divstyle="margin:5"> <center> <imgwidth=100;height=75;src='<%# "ProductImage.ashx?ProductID="+Eval("model_templat e") +"&width=100&height=75" %>'</center> </div> </ItemTemplate> выдрано конечно с корнем из кода ну думаю разберешься
__________________
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник". |
|
Сказали спасибо: |
15.09.2008, 01:51 | #4 |
Re: Asp.NET Как отобразить изображение на странице, если оно находится в бд?
мне помогло! спасиба, реально работает! я просто подумывал тоже хранить изображения в базе из справочника, удобней это и правильней. до этого в силу малого количества времени на разработку, хранились названия файлов... но это надо отслеживаться, чтобы эти файлы там были, и удалялись как только необходимость в них отпадала. короч, рекомендую!
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как отобразить дату в другом формате | Матвей Н | Скорая помощь | 14 | 02.05.2008 12:49 |
Не возможно отобразить страницу... | strannikov | Архив | 6 | 17.06.2007 01:51 |
|
|