mercoledì 12 novembre 2008

[ASP] - Forzare il Download di un File

CREARE UN FILE CHIAMATO download.asp e contenente:

<%@ Language=VBScript %>
<%
Response.Expires=0
Response.Buffer=0
Const CHUNK = 2048
strFilePath = Server.MapPath(Request.QueryString("file"))
Set fso = Server.CreateObject("Scripting.FileSystemObject")
' Controllo se esiste il file (qua si possono mettere altri controlli)
if fso.FileExists(strFilePath) then
set objFile = fso.GetFile(strFilePath)
Response.AddHeader "Content-Disposition", "attachment; filename=" & objFile.Name
Response.AddHeader "Content-Length", objFile.Size
Response.ContentType = "application/octet-stream"
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 1 ' adTypeBinary
objStream.LoadFromFile strFilePath
lSize = objStream.Size
lBlocks = 1
For lBlocks = lBlocks To lSize \ CHUNK
If Response.IsClientConnected = False Then Exit For
Response.BinaryWrite objStream.Read(CHUNK)
Next
lSize = lSize Mod CHUNK
If lSize > 0 And Response.IsClientConnected = True Then
Response.BinaryWrite objStream.Read(lSize)
End If
objStream.Close
Set objStream = Nothing
else
%><html><body onLoad="self.close()"></body></html><%
end if%>


L'HREF dovrà essere qualcosa del tipo:

<a href="download.asp?file=percorso_file.ext"> SCARICA FILE</a>

4 commenti:

Anonimo ha detto...

Guarda, ti giuro, ho cercato una soluzione e soltanto qui l'ho trovata :-) Ottimo lavoro !

Anonimo ha detto...

Sarai piccolo ma mi hai risolto un grande problema!!!
GRAZIE

Unknown ha detto...

Grazie a Voi :)

Anonimo ha detto...

ciao ale,
e se io volessi forzare il download in questo script di sotto?

<%
dir="/up"
Set file1 = CreateObject("Scripting.FileSystemObject")
Set file2 = file1.GetFolder(server.mappath("up"))
Set file3 = file2.Files
For Each file in file3
response.write ""
response.write file.name
response.write "

"
Next
%>

come vedi è uno script che mostra i contenuti di una cartella, ma me li fa aprire in broswer anzichè farmeli salvare...
Si potrebbe adattare la forzatura???