Ar jūs kada nors buvote nusivylęs, kai patekote į svetainę ir joje galite atsisiųsti dokumentus, paveikslėlius ir kitą turinį, o jūs norite tai padaryti, atsisiųskite! Vietoj to, kai spustelite turinio elementą, jis atidaromas jūsų naršyklėje. Aš buvau nusistatęs prieš šią problemą projekto metu, skirtoje medicinos įmonei, ir jiems reikėjo jų PDF failus atsisiųsti, o ne atidaryti. Na, yra būdas priversti jį atidaryti dialogo langą Įrašyti kaip.

Palaikysime, kad failai bus saugomi vietoje serverio, o ne duomenų bazėje. (Tai visai kita diskusija)

Pirmiausia turite žinoti savo failų vietą. Tarkime, kad jūsų failai yra //yourserver.com/files/filename.ext. Mes manysime, kad Server.MapPath yra "/ failai".

Taigi, sukurkime ASP failą, kuris valdys failo atsisiuntimą. Pradėkite kurdami naują, tuščią dokumentą naudodami užrašų knygelę arba mėgstamą HTML redaktorių. Įveskite šį ASP kodą:

<%
'=======================
'Define the names of your functions
'=======================
Dim Stream
Dim Contents
Dim FileName
Dim FileExt
Const adTypeBinary = 1
'=======================
'Get the actual file name from the URL that is passed to the browser
'=======================
FileName = request.querystring("filename") 'Get the name from the URL
'=======================
'GIVE AN ERROR MESSAGE IF THE URL IS EMPTY
'=======================
if FileName = "" Then
response.write "Filename Not specified."
response.end
end if
'=======================
'prevent access to certain files
'=======================
FileExt = Mid(FileName, InStrRev(FileName, ".") + 1)
select case UCase(FileExt)
Case "ASP", "ASA", "ASPX", "ASAX", "MDB"
response.write "You cannot access these file types."
response.end
end select
'=======================
'Start the download process if all is good
'=======================
response.clear
response.contentType = "application/octet-stream"
response.addheader "content-disposition", "attachment; filename=" & FileName
set stream = server.CreateObject("ADODB.Stream")
stream.type = adTypeBinary
stream.open
stream.LoadFromFile Server.MapPath("/files") & FileName
while not stream.EOS
response.BinaryWrite Stream.Read(1024 * 64)
wend
stream.Close
Set stream = Nothing
response.Flush
response.End
%>


Tai yra tam. Dabar išsaugokite ir įkelkite šį failą į savo serverį ir pavadinkite jį filedownloader.asp

Tarkime, failo vardas jūsų serveryje yra familytree.pdf

Tada jūs tiesiog perduotumėte šį URL į savo naršyklę ir pasirodys dialogo langas „File Save as Open“.

//yourserver.com/filedownloader.asp?filename=familytree.pdf

Viskas! Tada turėtumėte pamatyti tai:



Sėkmės ir jūs galite tai patobulinti naudodamiesi duomenų bazėmis ir kitomis puikiomis funkcijomis, kad įsitikintumėte, jog failai, kuriuos norite pasiekti savo vartotojams, turi galimybę būti atsisiųsti ir neatidaryti dabartinėje interneto naršyklėje, leidžiančioje jiems „likti“ jūsų svetainėje. .