ppeewee Skrevet 23. april 2008 Del Skrevet 23. april 2008 Hei, Jeg har et lite problem. Jeg bruker griedview og detailsview til å hente ut bilder fra en database. (tester litt med begge) Bildene ligger lagret i databasen som blob format. Har sottet opp Detailviewen slik <asp:DetailsView ID="DetailsView2" runat="server" Height="50px" Style="z-index: 101; left: 230px; position: absolute; top: 414px" Width="100px" AllowPaging="True" HorizontalAlign="Left" OnPageIndexChanging="DetailsView2_PageIndexChanging"> <Fields> <asp:boundfield datafield="Media_mediaId" /> <asp:boundfield datafield="BildeH" headertext="Thumbnail File" /> <asp:imagefield headertext="Thumbnail" dataimageurlfield="Media_mediaId" dataimageurlformatstring='~/imgGrab.aspx?_photo_id_={0}&_photo_large_=0'></asp:imagefield> </Fields> <PagerSettings PageButtonCount="5" Position="TopAndBottom" /> </asp:DetailsView> der går den altså vider til imgGrab.aspx som har som jobb å skrive ut selve bildet den henter fra databasen. Det gjør jeg på denne måten. Response.ContentType = "image/JPEG"; Response.OutputStream.Write(bytes, 0, bytes.Length); Response.Flush(); Problemet her er at jeg legger jo et stort bilde inn i byte arrayet. så når jeg legger det ut på hjemmesiden så blir det jo altfor altfor svært. Er det noen måte jeg kan gjøre det mindre på slik at det passer på hjemmesiden. (må være mulig å laste det ned i orginal størrelse. jeg ser og at viss jeg prøver å laste ned bilde, så har det automatisk navn imGrab.aspx - noen mulighet til å endre dette slik det holder sitt originale navn (det ligger også lagret i databasen) takker for all hjelp Mvh ppeewee Lenke til kommentar
Manfred Skrevet 23. april 2008 Del Skrevet 23. april 2008 Når jeg viser et bilde lagret på fil fra et aspx-script er koden som følger: HttpContext.Current.Response.ClearContent(); HttpContext.Current.Response.ClearHeaders(); HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=myFile.jpg"); HttpContext.Current.Response.ContentType = "image/jpeg"; HttpContext.Current.Response.TransmitFile(filePathAndName); HttpContext.Current.Response.End(); Det burde være mulig å gjøre noe lignende selv om du henter bildet fra en blob. Der ser du forresten hvordan jeg setter opp et standard-navn for filen også. ved å legge på den headeren. Lenke til kommentar
ppeewee Skrevet 24. april 2008 Forfatter Del Skrevet 24. april 2008 Når jeg viser et bilde lagret på fil fra et aspx-script er koden som følger: HttpContext.Current.Response.ClearContent(); HttpContext.Current.Response.ClearHeaders(); HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=myFile.jpg"); HttpContext.Current.Response.ContentType = "image/jpeg"; HttpContext.Current.Response.TransmitFile(filePathAndName); HttpContext.Current.Response.End(); Det burde være mulig å gjøre noe lignende selv om du henter bildet fra en blob. Der ser du forresten hvordan jeg setter opp et standard-navn for filen også. ved å legge på den headeren. Såg veldig bra ut. Burde gå. Men må si jeg er ikke heilt med på hvordan du setter størrelsen på bildet der ? Blir bildet ditt vist fint i griedviewen ? (har du sotte noen grenser på hvor stor griedviewen kan være? Hvorfor bruker du HttpContext.Current.Response istede for bare Response. ? Kan ver det seier seg selv, men er ikke heilt med på det. Lenke til kommentar
Manfred Skrevet 24. april 2008 Del Skrevet 24. april 2008 Den resizer ikke bildet på noen måte, nei. Skal du gjøre dette, så må du jo til med System.Drawing.Bitmap / System.Drawing.Image. Koden min spytter bare ut et bilde i originalstørrelse. Og ja, du kan vel droppe HttpContext.Current. Poenget mitt var vel bare at jeg bruker TransmitFile i stedet for å skrive buffer til Response, og hvordan du kan gi den et "custom" navn. Lenke til kommentar
ppeewee Skrevet 24. april 2008 Forfatter Del Skrevet 24. april 2008 Den resizer ikke bildet på noen måte, nei. Skal du gjøre dette, så må du jo til med System.Drawing.Bitmap / System.Drawing.Image. Koden min spytter bare ut et bilde i originalstørrelse. Og ja, du kan vel droppe HttpContext.Current. Poenget mitt var vel bare at jeg bruker TransmitFile i stedet for å skrive buffer til Response, og hvordan du kan gi den et "custom" navn. Det var svar på det jeg lurte på. Koden din fungerte fint og jeg får fikset navnet på fila. og bildet blir spytta ut korrekt. Istede for Transmitfile så bruker jeg bare Outputstream som også spytter ut bilde i original størrelse. Problemet her er at bildene ligger lagret i full størrelse i databasen. dvs 4-6 mbyte pr bilde. Når jeg da kjører enn spørringen så returnere 50 bilder så tar dette utrolig lang tid Bildet blir også helt feil å vise i firefox/explorer for det blir jo altfor stort. Fins det noen måter å gjøre det på slik at jeg kan skalere bilde men alikevell gi de original bilde når de laster ned ? Mulig å lagre et thumbtail i databasen og vise dette, men når de trykker på lagre som så blir det pekt mot original bilde? (eneste er at det blir jo på en måte dobbel lagring av bildet) Eller har du andre forslag på hvordan dette kan gjøres ? Takk for hjelpen så langt. mvh ppeewee Lenke til kommentar
ppeewee Skrevet 27. april 2008 Forfatter Del Skrevet 27. april 2008 Har et lite spørsmål angående denne koden. public void visBilde(int id) { string spørring = "Select Bilde from Bildefil where Media_MediaId = " + id + ";"; m_dsPhotos = dk.Select(spørring); String strFilter = String.Format("Media_MediaId={0}", id); // DataRow[] drows = m_dsPhotos.Tables[0].Select(strFilter); DataRow drow = m_dsPhotos.Tables[0].Rows[0]; Byte[] bytes = (Byte[])drow["Bilde"]; HttpContext.Current.Response.ClearContent(); HttpContext.Current.Response.ClearHeaders(); HttpContext.Current.Response.AddHeader("Content-Disposition", "inline;filename = jajaj"); //+ bildenavn); HttpContext.Current.Response.ContentType = "image/JPEG"; HttpContext.Current.Response.OutputStream.Write(bytes, 0, bytes.Length); HttpContext.Current.Response.Flush(); } Det som skjer er at jeg lister ut info og thumbnail bilde i en detailsview. rett under der så har jeg en knapp som seier vis stort bilde. Når jeg trykker på den så tar jeg å henter Media_MediaId`en til bilde og sender den videre til metoden dere ser over. Dette er en helt vanlig .cs fil. ikke aspx.cs. Bildet blir vist strålende på skjermen og tilpasser seg oppløsningen brukeren har på skjermen. Problemet kommer når du skal laste ned bildet. den laster ned en .jpeg fil med navn jaja som jeg har sotte. men fila er kun 23kb stor og inneholder ikke bilde. mitt spørsmål er derfor. HVORFOR? takker for svar mvh ppeewee Lenke til kommentar
Manfred Skrevet 28. april 2008 Del Skrevet 28. april 2008 Øynene mine vrir seg i smerte av å se æøå i variabelnavn, men det er nå så... Du har ikke en link til dette, så vi kan se et bilde selv? I tillegg burde du vel sette filename=jaja.jpg - Greit å ha med etternavn på fila Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå