[asp.net] image van sql database naar image controll

Pagina: 1
Acties:

  • Supermario16
  • Registratie: Mei 2004
  • Laatst online: 18:32
Ik wil een als "image" opgeslagen binary weergeven in een asp.net image control. Ik heb al flink wat gezocht op internet en kom er iedere keer bij uit dat ik de "gestreamde" bitmap eerst in een temp folder op moet slaan, waarna ik deze weer op moeten halen met de url property van het image control. Dit moet toch gemakkelijker kunnen, maar ik kan niets anders vinden.
Dit is mijn stukje code tot nu toe:
code:
1
2
3
byte[] storedImage = (byte[])dsImage.Tables[0].Rows[0]["Image"];
MemoryStream imgStream = new MemoryStream(storedImage);
Bitmap bmpImage = new Bitmap(imgStream);

Deze bitmap wil ik direct naar een image wegschrijven.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:53
En wat lukt er nu precies niet ?
Je kan je Image in een MemoryStream laden, echter, aangezien ik nergens direct een property van de ImageControl zie waar je direct een image kunt aan toekennen, zal je het toch mbhv die Url property moeten doen, en de image dus naar een temp file wegschrijven.

https://fgheysels.github.io/


  • Gurbe de n00b
  • Registratie: Juni 2003
  • Laatst online: 08-02-2024
Volgens mij vergeet je om een setje headers mee te geven ?

Portfolio


  • Niek.NET
  • Registratie: Oktober 2005
  • Laatst online: 19-02 17:32
Een mooie oplossing hiervoor is een HttpHandler gebruiken. Deze dan je image uit de database laten halen aan de hand van een query string als: ImageHandler.ashx?ImageID=1. Deze url kun je dan als src instellen voor je Image control of een doodgewonen img tag.

Ik heb toevallig zelf net iets dergelijks geschreven voor een webwinkel om vanuit een db plaatjes te cachen in een directory. Leuke uitbreiding op het geheel is bijv. een size meegeven.

Meer over HttpHandlers: hier

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 19-02 16:17

gorgi_19

Kruimeltjes zijn weer op :9

Niek.NET schreef op zondag 25 juni 2006 @ 03:18:
Ik heb toevallig zelf net iets dergelijks geschreven voor een webwinkel om vanuit een db plaatjes te cachen in een directory. Leuke uitbreiding op het geheel is bijv. een size meegeven.

Meer over HttpHandlers: hier
Waarom zou je de images willen cachen in een directory?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Niek.NET
  • Registratie: Oktober 2005
  • Laatst online: 19-02 17:32
gorgi_19 schreef op zondag 25 juni 2006 @ 09:03:
[...]

Waarom zou je de images willen cachen in een directory?
Om niet elke keer alles uit je database te hoeven trekken. Maar goed, dat hangt van je eigen situatie af. Ik resize de plaatjes on demand dus het kan zijn dat ik 4 verschillende groottes heb van 1 plaatje. Deze elke keer uit de database halen om vervolgens te resizen lijkt me niet ech wenselijk ivm performance.

pseudo, even uit mijn hoofd dus brand me niet af :) :

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Handler: IHttpHandler
{
   public void ProcessRequest(HttpContext context)
   {
      int _imageID = GetImageIDFromQueryString();
      Size _imageSize = GetImageSizeFromQueryString();
 
      context.ContentEncoding = "image/jpeg";

      string _fileName = ImageCacheDir + "/" +
                             _imageID +
                             _imageSize.ToString() + ".jpg";

      if(!File.Exists(_fileName))
      {
        Image _newImage = GetImageFromDb(_imageID);
        ResizeFileAndSave(_newImage, _imageSize);
      }
      Response.SendFile(_fileName);
   }
}

[ Voor 44% gewijzigd door Niek.NET op 25-06-2006 12:40 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 19-02 16:17

gorgi_19

Kruimeltjes zijn weer op :9

Niek.NET schreef op zondag 25 juni 2006 @ 12:23:
[...]


Om niet elke keer alles uit je database te hoeven trekken. Maar goed, dat hangt van je eigen situatie af. Ik resize de plaatjes on demand dus het kan zijn dat ik 4 verschillende groottes heb van 1 plaatje. Deze elke keer uit de database halen om vervolgens te resizen lijkt me niet ech wenselijk ivm performance.
Daar heb je een (memory)cache en / of outputcache voor? :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Niek.NET
  • Registratie: Oktober 2005
  • Laatst online: 19-02 17:32
gorgi_19 schreef op zondag 25 juni 2006 @ 13:03:
[...]

Daar heb je een (memory)cache en / of outputcache voor? :)
Hmmm, daar heb ik geen ervaring mee....

Ik zal het eens bekijken, bedankt voor de tip :)

@ts
Overigens denk ik nog steeds dat een HttpHandler de beste manier is om plaatjes uit je db te halen om ze vervolgens dus te cachen zoals gorgi_19 aangaf.

  • Supermario16
  • Registratie: Mei 2004
  • Laatst online: 18:32
Sorry dat ik zo laat reageer, van het weekend druk gehad. Zal alle opties eens goed bekijken en hier mijn bevindingen posten.

  • LoekD
  • Registratie: Augustus 2000
  • Laatst online: 24-01 09:34
Je kan ook gewoon een Picture.aspx pagina maken, de naam van de afbeelding als parameter meegeven en loodrecht in de Response stream schrijven. :-)

Hoe meer je drinkt, hoe korter je leeft, hoe minder je drinkt


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 19-02 16:17

gorgi_19

Kruimeltjes zijn weer op :9

LoekD schreef op maandag 26 juni 2006 @ 14:25:
Je kan ook gewoon een Picture.aspx pagina maken, de naam van de afbeelding als parameter meegeven en loodrecht in de Response stream schrijven. :-)
Dan kan je net zo goed een HttpHandler gebruiken, mis je nog een stuk overhead ook :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Supermario16
  • Registratie: Mei 2004
  • Laatst online: 18:32
Ik ben aan het denken, is het niet gewoon gemakkelijker de bestanden zelf op te slaan als jpeg / bmp in een map (dus niet in database) en deze door middel van opslaan van bestandsnaam in een database op te halen? (dus bestandsnaam ophalen uit database, en aan hand van bestandsnaam plaatje ophalen)

Of is dit geen normale werkwijze, want eerst image uit db halen, dan cachen en dan showen vind ik beetje omweg... Vind het raar dat het niet anders kan :?

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:56

TeeDee

CQB 241

Supermario16 schreef op woensdag 28 juni 2006 @ 08:49:
Ik ben aan het denken, is het niet gewoon gemakkelijker de bestanden zelf op te slaan als jpeg / bmp in een map (dus niet in database) en deze door middel van opslaan van bestandsnaam in een database op te halen? (dus bestandsnaam ophalen uit database, en aan hand van bestandsnaam plaatje ophalen)
Dat kan ook en is het over het algemeen de normale werkwijze.

Heart..pumps blood.Has nothing to do with emotion! Bored

Pagina: 1