Gå til innhold

.net c# Vise bilde fra MS SQL database


Anbefalte innlegg

Hei,

 

Jeg har en tabell med personinfo, der har jeg også en kolonne "Image" med datatypen "Image".

 

Disse dataene kjører jeg ut i labeler på en egen "profil-side".

 

Har lyst til å vise dette bildet i et lite format ved siden av personinformasjonen.

 

noen tips på dette?

Lenke til kommentar
Videoannonse
Annonse
Jeg har et veldig godt tips: Ikke lagre bildene i databasen.

 

Ser ingen problemer med å lagre noen hundre/tusen små bilder i SQL Server? Ville brukt varbinary(max) i stedet da image vil bli fjernet i fremtidige versjoner av SQL Server.

 

Det kan forresten nevnes at det i SQL Server 2008 er lagt mye bedre opp til lagring av binære data/filer ved å bruke varbinary(max) FILESTREAM datatypen.

Lenke til kommentar
Joda, alt til sitt bruk. Det kommer til an på HVA man lagrer der. Men generelt sett er jeg motstander av lagring av bilder i databasen.

 

Men alt dette vil forhåpentligvis bli mye bedre i SQL Server 2008. Ganske stilig med den ny FILESTREM datatypen. filen/binærdataene lagres som en separat fil på SQL Serveren, du kan få et file handle til filen slik at du kan åpne den som en "ekte" fil i .Net eller ved å bruke diverse Win32 API funksjoner for filhåndtering. Hastigheten skal være vedlig god i forhold til varbinary(max). Fulltekstindexering... Det var det jeg kom på i farten.

Lenke til kommentar
Joda, alt til sitt bruk. Det kommer til an på HVA man lagrer der. Men generelt sett er jeg motstander av lagring av bilder i databasen.

 

Men alt dette vil forhåpentligvis bli mye bedre i SQL Server 2008. Ganske stilig med den ny FILESTREM datatypen. filen/binærdataene lagres som en separat fil på SQL Serveren, du kan få et file handle til filen slik at du kan åpne den som en "ekte" fil i .Net eller ved å bruke diverse Win32 API funksjoner for filhåndtering. Hastigheten skal være vedlig god i forhold til varbinary(max). Fulltekstindexering... Det var det jeg kom på i farten.

 

Det er jo smart, jeg bruker FTP for å lagre bilder, og da møter man jo på problemet at FTP er en idiotisk protokoll.

Lenke til kommentar

Ulempene:

- Kan ikke bruke FTP til å laste opp/ned

- Databaselagring er ofte dyrere enn webhotell

- Når bildene skal presenteres må de først transporteres fra databaseserver til webserver for deretter å prosesseres.

- Mer komplisert å kode

 

Fordelene:

- Bildene faller inn i samme backup-rutiner som databasen

 

Hvis du ikke har en veldig god grunn til å gjøre dette så vil jeg anbefale å la være. En av de virkelig gode grunnene til å lagre filer i databasen er at søk i filene (med index server) blir meget enkelt, men en bildefil er jo ikke søkbar. Jeg ville nok anbefalt deg å holde bildene på filsystemet...

 

På codeproject finner du mange bra artikler om dette. bl.a.

http://www.codeproject.com/KB/web-image/EasyThumbs.aspx

Lenke til kommentar
- Når bildene skal presenteres må de først transporteres fra databaseserver til webserver for deretter å prosesseres.

Det kommer vel an på webside/webserver?

Dessuten brukes ikke ALLE databaser til websider.

 

Jeg synes det er større fordeler en ulemper med dette.

Fordelen er også at FTP er stygt, teit, og gammeldags, og burde ikke brukes hvis det ikke trengs.

Endret av GeirGrusom
Lenke til kommentar

For min del er det liten grunn til å bruke FTP for opp/nedlasting, størrelse på database betaler jeg ikke for, koden er da slett ikke avansert. Jeg kan ikke se hva slags argumenter du skal ha mot dette.

 

Hvis man i tillegg kan få et handle, som kaffenils sier, så forsvinner jo alle argumentene dine i et stort jafs.

 

Gleder meg til å se nærmere på dette. Det blir liksom ikke det samme som å lagre bilder i BLOB i mysql :p

Lenke til kommentar
...og skal du hente ut dette, så ble det straks mye mer effektivt enn å måtte skrive kode som åpner og tråler alle bildefilene :wee:

 

Eller enda mer effektiv: registrer et jpeg IFilter i SQL Server slik at EXIF kan leses og indexeres av Full-Text Index tjenesten.

Lenke til kommentar
Jeg synes det er større fordeler en ulemper med dette.

Fordelen er også at FTP er stygt, teit, og gammeldags, og burde ikke brukes hvis det ikke trengs.

 

Hvordan klarer du å blande inn FTP i diskusjonen?? SQL kan IKKE erstatte FTP, dette er to heeeelt forskjellige ting. En bedre sammenligning vil være FTP vs. vanlig fileshare. Og SQL vs. filsystem. FTP/fileshare/webservices/brevduer/etc er transport, SQL/filsystem er lagring. (Ja, man kan laste opp bilder over TDS (SQL protokollen), men å putte databasen på internett elller la klienten få direkte tilgang til dette er ikke veldig lurt).

 

Jeg ville nok heller brukt webside/webservice (gjerne med SSL) for å laste opp bilder, for deretter å lagre dem i enten database eller filsystem.

 

Andre bakdeler med bilder i databasen:

* DatabaseLog filer kan vokse seg veldig store.

* Backup blir stor -- eller "komplisert" på grunn av oppdeling.

* Mye mer nettverkstrafikk mellom webserver/client og databaserserver.

* Mer jobb å gjøre for databaseserveren. Og vanligvis er det databaseserveren som har mye å gjøre, mens webserverene går på tomgang. Særlig disk IO kan være en en flaskehals, så man bør tenke igjennom om man virkelig vil dytte alle bildene også over på DB. Og helst på egne disker.

 

 

Jeg har tidligere gjordt begge deler... Både i database og til filsystem. Noe av det viktigste er å TENKE over konsekvensene når man gjør dette. Hva betyr fordelene og bakdelene for DEG? Hvordan blir dette når du får X brukere og skal scale-out? Hvordan gjør du backup idag? Hvor mye har du tenkt å betale for disk på DB og web/klient? etc...

 

 

----

 

Men hvordan vise dem:

Enkleste måte er å lage en ASPX side som f.eks. heter ShowDBImage.aspx?ImageID=xxx

 

* Fjern alt innhold fra ASPX siden utenom øverse linjen med <%# ...etc...%>

* Hent ut data på vanlig måte fra SQL (SqlConnection, SqlCommand, etc)...

* Sett ContentType og Content disposition header

* Page.Respose.OutputStream for å skrive ut bildet

 

Men det er nok bedre å lage en httpmodule eller httphandler for å slippe overhead'n med at .Net må lage en Page som i eksempelet over.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...