10. december 2003 - 15:31Der 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)
' 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
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
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:
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'><<</a>" Else Response.Write "<<" End If
Response.Write " "
If Clng(intPage) < Clng(intPageCount) Then Response.Write "<a href=" & Scriptname & "?page=" & intPage + 1 & " TARGET='_self'>>></a> " Else Response.Write ">>" End If %>
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 :-)
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 :-(
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.