ASPcenter.net

24 febbraio 2010

Forzare il download di un file con ASP ed ADO

Archiviato in: Gestione File — Tag:, , , , — lukeonweb @ 11:51

Spesso capita di mettere a disposizione dei propri utenti una serie di documenti non in formato HTML, ma ad esempio in formato MS Word, MS Excel, PDF o file immagine. uesti documenti finiscono per aprirsi nel browser dell’utente, dando vita a formattazioni improbabili e sovraccarico di lavoro per il browser che potrebbe impallarsi.

A porre rimedio pensa ADO (ActiveX Data Object) che, contrariamente alle credenze popolari, non serve solo all’interfaccia con i database, ma anche a trattare altri tipi di dati, come nel caso dell’interazione con i file con ADODB.Stream.


Il suo utilizzo è molto semplice e immediato: si dichiara un nuovo oggetto, si imposta il tipo, si carica il file desiderato, si impostano le normali intestazioni ASP e si distrugge l’oggetto.

Si crei il file download.asp che, privo di interfaccia, recupera in una querystring il file che si desidera scaricare e non visualizzare. Il codice è opportunamente commentato

<%@LANGUAGE = VBScript%>
<%
' Recupero il file da scaricare
Dim download, F
F = Request.QueryString("file")

' Creo l'oggetto ADODB.Stream
Set download = Server.CreateObject("ADODB.Stream")

' Apro la connessione e carico il file
download.Type = 1
download.Open
download.LoadFromFile Server.MapPath(F)

' Aggiungo le intestazioni del tipo di file
Response.AddHeader "Content-Disposition", "attachment; filename=" & F
Response.ContentType = "application/octet-stream"
Response.BinaryWrite download.Read

' Un po di pulizia...
download.Close
Set download = Nothing
%>

A questo punto, puntando a questo file, possiamo scaricare tutti i documenti che vogliamo scrivendo un link del tipo

<a href="download.asp?file=documento.doc">Documento Word</a>

Nessun commento »

Non c'è ancora nessun commento.

RSS feed dei commenti a questo articolo. TrackBack URL

Lascia un commento

ASPcenter.net è il blog italiano su ASP, ASP.Net, VB.Net, C# e Visual Studio - Funziona con WordPress