/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Hvordan vises et billede med BinaryWrite r~
Fra : Jakob Munck


Dato : 30-05-02 14:50

Det er lykkedes mig at få en udmærket uploadfunktion til at virke, således
at jeg kan uploade tekster og billeder til serveren og få dem vist for
brugerne af min site. Både tekst og billeder vises på en html-side i en
tabel med kommandoen:

Response.BinaryWrite rs("FileData")

og det virker udmærket når det drejer sig om tekst (især html-tekst), men
når det drejer sig om billeder, bliver billedet ikke vist, men i stedet
vises der en lang række meningsløse karakterer. Problemt kan jeg dog løse,
hvis jeg fjerner al html-kode på siten, for så vises billedet (er ligger i
en Acces-db) udmærket på en helt hvid baggrund. Men det ser jo forkedeligt
ud. Jeg vil gerne have, at de uploadede billeder vises på samme måde som de
uploadede tekster, nemlig på en html-side i en tabel.

Kan det lade sig gøre?
Hvordan?

v.h.
Jakob Munck




 
 
Torben Brandt (30-05-2002)
Kommentar
Fra : Torben Brandt


Dato : 30-05-02 14:55

Jakob Munck wrote in dk.edb.internet.webdesign.serverside.asp:
> Det er lykkedes mig at få en udmærket uploadfunktion til at virke, således
> at jeg kan uploade tekster og billeder til serveren og få dem vist for
> brugerne af min site. Både tekst og billeder vises på en html-side i en
> tabel med kommandoen:
>
> Response.BinaryWrite rs("FileData")
>
> og det virker udmærket når det drejer sig om tekst (især html-tekst), men
> når det drejer sig om billeder, bliver billedet ikke vist, men i stedet
> vises der en lang række meningsløse karakterer. Problemt kan jeg dog løse,
> hvis jeg fjerner al html-kode på siten, for så vises billedet (er ligger i
> en Acces-db) udmærket på en helt hvid baggrund. Men det ser jo forkedeligt
> ud. Jeg vil gerne have, at de uploadede billeder vises på samme måde som de
> uploadede tekster, nemlig på en html-side i en tabel.
Lad mig lige se om jeg har forstået den rigtigt:
- Du har en database
- I databasen er der nogle billeder og noget html-kildekode. Disse to ting
ligger i forskellige records i databasen.
- der refereres til billederne ved at der i html-koden står <img
src="lookup.asp?id=123">

> Kan det lade sig gøre?
Ja det tror jeg godt :)

> Hvordan?
Når du sender noget, så skal du angive hvilken "type" det er. Det gøres ved
Response.ContentType = "image/gif" (eller "text/html" men det behøver du nok
ikke at skrive) alt efter om det er et billede eller noget html-kode, du er
ved at sende.

Hvis jeg har misforstået noget, så må du lige forklare hvordan og hvor disse
mærkelige tegn kommer, og hvordan du refererer til billederne.

mvh Torben


--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Kim Jensen (30-05-2002)
Kommentar
Fra : Kim Jensen


Dato : 30-05-02 15:25

> Response.BinaryWrite rs("FileData")
> og det virker udmærket når det drejer sig om tekst (især html-tekst), men
> når det drejer sig om billeder, bliver billedet ikke vist, men i stedet
> vises der en lang række meningsløse karakterer. Problemt kan jeg dog løse,
> hvis jeg fjerner al html-kode på siten, for så vises billedet (er ligger i
> en Acces-db) udmærket på en helt hvid baggrund. Men det ser jo forkedeligt
> ud. Jeg vil gerne have, at de uploadede billeder vises på samme måde som
de
> uploadede tekster, nemlig på en html-side i en tabel.
> Kan det lade sig gøre?

Ja, du skal lave et separat ASP-script der udelukkende sender de binære data
samt en passende content-type.
Når du vil danne din side med tekst og billeder, placerer du billederne via
normal HTML ala:

<img src="mitscriptderviserbillederfradatabasen.asp?id=<% =rs("id") %>">

- hvor du altså sender et eller andet ID videre til det andet script, som
derefter henter de binære data og sender dem til browseren.


mvh
Kim Jensen



Jakob Andersen (30-05-2002)
Kommentar
Fra : Jakob Andersen


Dato : 30-05-02 16:06

"Jakob Munck" <jakob.munck@tdcadsl.dk> wrote in message
news:3cf629f9$0$236$edfadb0f@dspool01.news.tele.dk...
> Problemt kan jeg dog løse,
> hvis jeg fjerner al html-kode på siten, for så vises billedet (er ligger i
> en Acces-db)

Det er IKKE en god ide at gemme binært data såsom billeder i en Access
database da den hurtigt bliver meget stor og dermed tung for IIS'en at
arbejde med.

Læg istedet filerne i filsystemet og gem en URI i databasen.

--
Jakob Andersen



Jakob Munck (30-05-2002)
Kommentar
Fra : Jakob Munck


Dato : 30-05-02 17:19

1. Vedr. Access, er serverens belastning så ikke først og fremmest afhængig
af hvor mange objekter der ligger i databasen, frem for af filstørrelsen af
disse objekter? Jeg ved godt, at man normalt anbefaler at lægge billeder
udenfor databasen, men det har nu nogle væsentlige fordele at lægge dem
inden i databasen, og når det overhovedet er muligt, må det vel være fordi
det rummer nogle fordele. Og det gør det i her, så vidt jeg kan se.


2. Problemet er bare, at .jpg filerne ikke vises rigtigt, hvis de forsøges
placeret på en html-side. Anvendes ikke html, vises billedet uden problemer.

I Access tabellen står der, at feltet "fileData" rummer "Lange binære data"
og i listen over datatyper i tabellen står der, at feltet indeholder
"OLE-objekt". Det hele præsenteres for gæsterne med denne kode:

<HTML>
<HEAD>
</HEAD>
<BODY bgcolor="ffffcc">
<%
......
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" &
Server.MapPath("../../db/dbtopdating.mdb")
Set rs = Server.CreateObject("ADODB.Recordset")

rs.Open "select [FileData],[ContentType] from tbUploadFiles where ID = " &
ID, connStr, 2, 4

If Not rs.EOF Then
Response.ContentType = rs("ContentType")
=> Response.BinaryWrite rs("FileData")
End If
.....
%>

Det er altså linien med => som er problemet. Når filen søges vist på en
html-side viser den bare en masse meningsløse karakterer efter hinanden. Den
gengiver altså billedet som tekst !

Men hvordan skal jeg så få billedet vist, hvis det skal være på en html-side
i en tabel? Præcis kode ønskes, hvis det er muligt.

v.h.
Jakob Munck




Jakob Andersen (30-05-2002)
Kommentar
Fra : Jakob Andersen


Dato : 30-05-02 23:04

Jakob Munck wrote:
> 1. Vedr. Access, er serverens belastning så ikke først og fremmest
> afhængig af hvor mange objekter der ligger i databasen, frem for af
> filstørrelsen af disse objekter?

Nej, for serveren skal jo hver gang databasen skal tilgås tygge den igennem,
og jo større den er rent filmæssigt, jo længere tid tager det.

> Jeg ved godt, at man normalt
> anbefaler at lægge billeder udenfor databasen, men det har nu nogle
> væsentlige fordele at lægge dem inden i databasen,

Hvilke?

> og når det
> overhovedet er muligt, må det vel være fordi det rummer nogle
> fordele. Og det gør det i her, så vidt jeg kan se.

Det rummer også fordele, men ikke så mange når vi snakker webbrug.

> 2. Problemet er bare, at .jpg filerne ikke vises rigtigt, hvis de
> forsøges placeret på en html-side. Anvendes ikke html, vises billedet
> uden problemer.

Du kan ikke ligepludselig skifte contenttype på en side, du har jo printet
HTMLoutput og hvis du så skifter til en anden contenttype fortolker
browseren jo HTMLen som en del af den binære kode som f.eks. et billed
består af.

> Men hvordan skal jeg så få billedet vist, hvis det skal være på en
> html-side i en tabel? Præcis kode ønskes, hvis det er muligt.

Du bliver nødt til at lave en seperat fil der håndterer din billedvisning,
og som tager et id som parameter i denne fil skriver du så følgende:


VisBilled.asp
<%
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" &
Server.MapPath("../../db/dbtopdating.mdb")
Set rs = Server.CreateObject("ADODB.Recordset")
ID = CInt(Request.Querystring( "id" ))
rs.Open "select [FileData],[ContentType] from tbUploadFiles where ID = " &
ID, connStr, 2, 4

If Not rs.EOF Then
Response.ContentType = rs("ContentType")
Response.BinaryWrite rs("FileData")
End If
%>

og ikke andet.

Når du så skal bruge billedet printer du følgende på din side:

<img src="VisBilled.asp?id=<%= objRS("FilID" ) %>">

--
Jakob Andersen



Jakob Munck (31-05-2002)
Kommentar
Fra : Jakob Munck


Dato : 31-05-02 16:02

1. Tak for svaret, og for koden. Jeg har fået det til at virke.

2. Vedr. billeder i en database: Hvis billederne fylder så meget, kan man jo
bare lave en særlig database, hvor de ligger, så de dermed ikke tager tid
fra andre funktioner på siten. Fordelen ved at have billederne i en
database, er at man lettere kan sortere dem og slette de gamle, på samme
måde som med andre data. Jeg ved godt, at dette også kan gøres uden
database, men så kræver det mere kodning og giver det mere besvær. Det er i
hvert fald min egen erfaring.

Endnu en gang tak for dine gode svar.

v.h.
Jakob Munck






Jakob Andersen (31-05-2002)
Kommentar
Fra : Jakob Andersen


Dato : 31-05-02 19:15

"Jakob Munck" <jakob.munck@tdcadsl.dk> wrote in message
news:3cf78c3e$0$257$edfadb0f@dspool01.news.tele.dk...
> 1. Tak for svaret, og for koden. Jeg har fået det til at virke.

Ok, godt

> 2. Vedr. billeder i en database: Hvis billederne fylder så meget, kan man
jo
> bare lave en særlig database, hvor de ligger, så de dermed ikke tager tid
> fra andre funktioner på siten.

Ja, men så skal du til at have sving i to database connections og det tager
jo tid hver gang du åbner til en DB.

> Fordelen ved at have billederne i en
> database, er at man lettere kan sortere dem og slette de gamle, på samme
> måde som med andre data. Jeg ved godt, at dette også kan gøres uden
> database, men så kræver det mere kodning og giver det mere besvær. Det er
i
> hvert fald min egen erfaring.

Det kan der selvfølgelig argumenteres frem og tilbage om, men min erfaring
siger mig at den ekstra kodning er det værd. Ofte også fordi at der lige er
et bestemt billede der skal erstattes, så er det nu noget nemmere når man
bare lige kan overskrive filen istedet for at skulle rode i databasen.

> Endnu en gang tak for dine gode svar.

Jeg er da kun glad, hvis jeg kan hjælpe med min begrænsede viden.

--
Jakob Andersen



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste