Avatar billede larsen Nybegynder
10. december 2003 - 15:31 Der er 8 kommentarer og
1 løsning

Vise billeder udenfor "wwwroot"

Hejsa,

Er der nogen, der ved hvordan jeg kan vise billeder, hvor filnavnet hentes fra en Access-DB, og hvor billederne ligger udenfor det tilgængelige område ?

Dvs :
/db (Her er databasen)
/db/pictures (Her ligger billederne)
/wwwroot
/wwwroot/Gallery (her ligger asp-filen som viser billederne)

jeg ved ikke om det er problematisk :-?
Avatar billede djjerry82 Nybegynder
10. december 2003 - 15:33 #1
../db/pictures ??
Avatar billede mortency Nybegynder
10. december 2003 - 15:38 #2
<%
On Error Resume Next


' Find fil-stien ud fra filnavnet angivet i QueryStringen: ?file=xxxx
' Både \ og / fjernes fra filnavnet for at sikre at man ikke kan gå ind i andre mapper.
' Filerne skal selvfølgelig være placeret et sted, så webserveren ikke kan sende dem.
' Dette ville spolere hele idéen. Her er de placeret i C:\Filer\. Har man ikke egen
' server, men et webhotel, har man normalt adgang til den mappe som webmappen ligger i.
' Her kan filerne også placeres. Stien på denne mappe fås med:
FilePath = Left(Server.MapPath("/"), InStrRev(Server.MapPath("/"), "\")) & FileName

FileName = Replace(Replace(Request.QueryString("file"), "/", ""), "\", "")
FilePath = "C:\Filer\" & FileName


Response.Buffer = True ' Vent med at sende output til scriptet er færdigt

Set st = Server.CreateObject("ADODB.Stream") ' Åben Stream-objektet

st.Type = 1 ' Sæt fil-typen til binær
st.Open ' Åben objektet
st.LoadFromFile FilePath ' Åben fil angivet i QyeryStringen: ?file=xxxx

Response.Clear ' Rens output-bufferen

Response.ContentType = "image/jpg" ' Sæt fil-typen (MIME-Type). I dette tilfælde en
' .gif-fil. Se evt. artiklen 'MIME Content-types i IIS'

' Følgende sætning gør at der fremkommer en download-boks hos brugeren. Hvis man ønsker
' at det f.eks. er et billede, der vises i en HTML-fil, skal man selvfølgelig ikke gøre det.
' Det sætter også det viste filnavn til fil.gif. Prøv evt. at ændre 'attachment' til 'inline'.
Response.AddHeader "content-disposition", "attachment;filename=fil.jpg"

Response.BinaryWrite st.Read() ' Udskriv filen til brugeren: (I første omgang bufferen)

st.Close ' Luk Stream-objektet
Set st = Nothing ' Ryd op
Response.End ' Afslut scriptet

%>
Avatar billede larsen Nybegynder
10. december 2003 - 16:44 #3
Jeg ved ikke.... Jeg kan ikke få det til at virke..

Scriptet ser således ud :


<%
Response.Buffer = True ' Vent med at sende output til scriptet er færdigt
Response.Clear ' Rens output-bufferen

Dim ConnStr
ConnStr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=D:\web\db\DB.mdb"

%>
<%
'HENT BINARY FILE
Sub getBinaryFile(FileName)
' On Error Resume Next


' Find fil-stien ud fra filnavnet angivet i QueryStringen: ?file=xxxx
' Både \ og / fjernes fra filnavnet for at sikre at man ikke kan gå ind i andre mapper.
' Filerne skal selvfølgelig være placeret et sted, så webserveren ikke kan sende dem.
' Dette ville spolere hele idéen. Her er de placeret i C:\Filer\. Har man ikke egen
' server, men et webhotel, har man normalt adgang til den mappe som webmappen ligger i.
' Her kan filerne også placeres. Stien på denne mappe fås med:

    FilePath = Left(Server.MapPath("/"), InStrRev(Server.MapPath("/"), "\")) & FileName

    FileName = Replace(Replace(Filename, "/", ""), "\", "")
    FilePath = "D:\web\db\Gallery\Thumbs\" & FileName

    Set st = Server.CreateObject("ADODB.Stream") ' Åben Stream-objektet

    st.Type = 1 ' Sæt fil-typen til binær
    st.Open ' Åben objektet
    st.LoadFromFile FilePath ' Åben fil angivet i QyeryStringen: ?file=xxxx

'    Response.Clear ' Rens output-bufferen

    Response.ContentType = "image/jpg" ' Sæt fil-typen (MIME-Type). I dette tilfælde en
' .gif-fil. Se evt. artiklen 'MIME Content-types i IIS'

' Følgende sætning gør at der fremkommer en download-boks hos brugeren. Hvis man ønsker
' at det f.eks. er et billede, der vises i en HTML-fil, skal man selvfølgelig ikke gøre det.
' Det sætter også det viste filnavn til fil.gif. Prøv evt. at ændre 'attachment' til 'inline'.
'    Response.AddHeader "content-disposition", "attachment;filename=fil.jpg"

    Response.BinaryWrite st.Read() ' Udskriv filen til brugeren: (I første omgang bufferen)

    st.Close ' Luk Stream-objektet
    Set st = Nothing ' Ryd op

'    Response.End ' Afslut scriptet

End Sub
'SLUT BINARY FILE
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
<head>
    <title>Test</title>
<meta name="Generator" content="Stone's WebWriter 4">
</head>
<BODY>
<h1 align="center">
Billeder fra<BR>
Test
</h1>
<%
Scriptname=Request.ServerVariables("SCRIPT_NAME")
intPage = Request("page")
If isNumeric(intPage) = False Or intPage < 1 Then
    intPage = 1
End If

VisAntalRaekker=2
VisRaekke=0
Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "SELECT * FROM Gallery WHERE GruppeID=2"
rs.Open strSQL, ConnStr, 1
If Not (rs.BOF Or rs.EOF) Then
    rs.PageSize = 6
    rs.AbsolutePage = intPage
    intRecCount = rs.PageSize
    intPageCount = rs.PageCount
    Response.Write "<p><b>Side " & intPage & " af " & intPageCount & "</b></p>"
%>
</h1>
<table align="CENTER" border="1" cellpadding="8" cellspacing="4" width="<%=VisAntalRaekker*250%>">
<%
    Do While Not rs.EOF And intRecCount > 0
    If VisRaekke=VisAntalRaekker then
        Response.Write("<TR><BR><TR>")
        VisRaekke=1
    Else
        VisRaekke=VisRaekke+1
    End If
%>
    <td>
        <CENTER><STRONG><%=RS("BilledNavn")%></STRONG></CENTER>
        <BR>
<%
        Response.Write("<A HREF=""java script:displayPicture('" & RS("BilledID") & "',790,590)"">")
        getBinaryFile Rs("Filnavn")
%>
        <BR>
        <HR>
        <font size="1" face="Tahoma">B x H :<strong><%= RS("Bredde")%> x <%= RS("Højde")%></strong> </font><BR>
        <font size="1" face="Tahoma">Beskrivelse<BR><strong><%= RS("Beskrivelse")%></strong> </font>
<%
    intRecCount = intRecCount - 1
    rs.MoveNext
    Loop
%>
</TABLE>
<%
End If
rs.Close
Set rs = Nothing

Response.Write "<p>Gå til side "
For intNum = 1 To intPageCount
    Response.Write "<a href=?page=" & intNum & " TARGET='_self'>" & intNum & "</a> "
Next

Response.Write "<p>"
If Clng(intPage) > 1 Then
    Response.Write "<a href=?page=" & intPage - 1 & " TARGET='_self'>&lt;&lt;</a>"
Else
    Response.Write "&lt;&lt;"
End If

Response.Write "&nbsp;"

If Clng(intPage) < Clng(intPageCount) Then
    Response.Write "<a href=" & Scriptname & "?page=" & intPage + 1 & " TARGET='_self'>&gt;&gt;</a> "
Else
    Response.Write "&gt;&gt;"
End If
%>

</body>
</html>
<%
Response.End
%>
Avatar billede burningice Nybegynder
10. december 2003 - 16:48 #4
larsen>> du kan sq ikke bare smide det ind på samme side som din tekst... en side kan ikke have flere forskellige response-typer

så, ind på en side for sig selv med den kode morten kom med !!
Avatar billede larsen Nybegynder
10. december 2003 - 16:55 #5
Jamen hvordan kan det så laves da det helst skal ligge i samme script ??
Jeg hæver gerne til 30pt for en løsning (enten scripts eller ideer) der virker :-)
Avatar billede mortency Nybegynder
10. december 2003 - 17:04 #6
Det letteste er om du setter stien til "../../db/pictures/" & Rs("StiTilBillede") & "
Avatar billede larsen Nybegynder
10. december 2003 - 17:16 #7
Det vil den ikke.. Den kan ikke tilgå billedet med <IMG SRC='../db/pictures/" & Rs("Filnavn") & "'>"
Den vil ikke vise noget der er udenfor wwwroot på alm. vis :-(
Avatar billede burningice Nybegynder
10. december 2003 - 18:00 #8
larsen>> smid koden i en fil for sig selv, og link til billedet på denne måde:

<IMG SRC='billeder.asp?billede=" & Rs("Filnavn") & "'>"
Avatar billede larsen Nybegynder
04. marts 2004 - 14:24 #9
Lukker og takker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester