"Kurt G" <kurt_g@guldbaek.net> wrote in message
news:473f225d$0$90267$14726298@news.sunsite.dk...
> Det er da et tilbud, som man ikke kan sidde overhørig. Det er altid godt
> med eksempler, så jeg vil gerne sige jatak.
> Jeg har pga af andet endnu ikke startet med den del af projektet!
>
> Mvh Kurt
>
Mit forslag er at du streamer filen der skal downloades til brugeren.
På den måde kan dine brugere heller ikke se den komplette sti til filen og
hente den vej...
Lav en fil med nedenstående indhold og kald den f.eks. getfile.asp.
Dette er filen der henter og streamer filen til brugeren, hvis filen findes,
ellers går den til en fejlside.
Findes filen, lægges der desuden 1 til antal downloads, eller der oprettes
en ny txt-fil med indhold på 1, hvis filen ikke tidligere har været hentet.
Log filen ligger i dette tilfælde i /downloads/logs, som skal have
skriverettigheder.
getfil.asp:
--------------------------------------
<%
' Get file details
FileName = server.HTMLEncode(Trim(cstr("" & request("FiN"))))
' create stream object
on error resume next
Set GetFile = Server.CreateObject("ADODB.Stream")
GetFile.Type = 1
GetFile.Open
GetFile.LoadFromFile Server.Mappath("\download\filer\"&FileName)
If Err.number = 0 Then
Response.Clear
Response.ContentType = "application/octet-stream"
Response.AddHeader "Content-Disposition", "attachment; filename="&FileName
Response.AddHeader "Content-Transfer-Encoding","binary"
'Response.BinaryWrite GetFile.Read
do while not GetFile.EOS
'3670016 = 3.5 MB (the IIS limit is 4 MB)
response.binaryWrite GetFile.read(3670016)
response.flush
loop
GetFile.Close
Set GetFile = Nothing
Response.End()
' Denne del er tællingen af downloads
Set ObjCounterFile = Server.CreateObject("Scripting.FileSystemObject")
CounterFile = Server.MapPath ("/download/logs/" & FileName & ".txt")
Set ReadCounterFile= ObjCounterFile.OpenTextFile (CounterFile, 1, True)
If Not ReadCounterFile.AtEndOfStream Then
CounterHits = Trim(ReadCounterFile.ReadLine)
If CounterHits = "" Then CounterHits = 0
Else
CounterHits = 0
End If
ReadCounterFile.Close
Set ReadCounterFile = Nothing
CounterHits = CounterHits + 1
Set WriteCounterFile= ObjCounterFile.CreateTextFile (CounterFile, True)
WriteCounterFile.WriteLine(CounterHits)
WriteCounterFile.Close
Set WriteCounterFile = Nothing
Set ObjCounterFile = Nothing
Else '< Error
GetFile.Close
Set GetFile = Nothing
'Ved fejl redirectes der til nedenstående side...
Response.Redirect("/default.asp?alert=1")
End If
%>
--------------------------------------
Blot tilinfo, så er den del af koden lavet for at dele filen op i mindre
bidder. Man kan højest sende lige under 4 mb afsted ad gangen og var den
kode der ikke, ville du få fejl ved større filer...
do while not GetFile.EOS
'3670016 = 3.5 MB (the IIS limit is 4 MB)
response.binaryWrite GetFile.read(3670016)
response.flush
loop
Nå, tilbage til selve linket til filen...
Et link til en fil ser således ud:
getfile.asp?FiN=Poster_Rabat_10.pdf
Hvor det der kommer efter FiN= er filens navn.
Håber det er til at gå til...
Ellers skriv! Jeg benyter selv den kdoe ret mange steder. Mest getfile-delen
og lader så optællingen ske i database.
--
Thrane