Forzare il download di un documento da una pagina ASP.NET

di Riccardo Golia, in UserScript, ASP.NET, VB.NET,

Quando un documento viene generato a run-time in una pagina ASP.NET per essere inviato al client, per esempio perchè viene recuperato da un database o da un'altra locazione, la proprietà ContentType dell'oggetto Response viene solitamente impostata con un valore che identifica il tipo del formato (tipo MIME). La proprietà menzionata corrisponde al parametro Content-Type dell'header della risposta HTTP.

Ecco gli esempi relativi ad alcuni dei formati più comunemente usati:

'Documento PDF
Response.ContentType = "application/pdf"

'Archivio ZIP
Response.ContentType = "application/zip"

'Documento MS Word
Response.ContentType = "application/msword"

'Documento MS Excel
Response.ContentType = "application/vnd.ms-excel"

'Filmato ASF
Response.ContentType = "video/x-ms-asf"

'Filmato AVI
Response.ContentType = "video/avi"

'Filmato MPEG
Response.ContentType = "video/mpeg"

'Audio WAV
Response.ContentType = "audio/wav"

'Audio MP3
Response.ContentType = "audio/mpeg3"

'Immagine GIF
Response.ContentType = "image/gif"

'Immagine JPG
Response.ContentType = "image/jpeg"

'Formato binario generico
Response.ContentType = "application/octet-stream"

Quando un documento viene inviato al client, questo viene automaticamente aperto se il formato viene riconosciuto e associato ad un programma installato localmente.
Per evitare l'apertura automatica del documento, lasciando all'utente finale la scelta se aprire o salvare il file, occorre impostare anche il parametro Content-Disposition dell'header della risposta HTTP con il valore attachment, specificando inoltre il nome del file completo di estensione.

L'esempio di seguito si riferisce al caso di un documento Excel generato a run-time ed inviato al client come attachment.

Dim sb As New System.Text.StringBuilder()
Dim output As String = String.Empty
Dim fileName As String = "ASPItalia.XLS"

'Crea una tabella con cinque righe e quattro colonne
sb.Append("<table>" & vbCrLf)
sb.Append("<tr>" & vbCrLf)
sb.Append("<td>Cella A1</td><td>Cella B1</td><td>Cella C1</td><td>Cella D1</td>" & vbCrLf)
sb.Append("</tr>" & vbCrLf)
sb.Append("<tr>" & vbCrLf)
sb.Append("<td>Cella A2</td><td>Cella B2</td><td>Cella C2</td><td>Cella D2</td>" & vbCrLf)
sb.Append("</tr>" & vbCrLf)
sb.Append("<tr>" & vbCrLf)
sb.Append("<td>Cella A3</td><td>Cella B3</td><td>Cella C3</td><td>Cella D3</td>" & vbCrLf)
sb.Append("</tr>" & vbCrLf)
sb.Append("<tr>" & vbCrLf)
sb.Append("<td>Cella A4</td><td>Cella B4</td><td>Cella C4</td><td>Cella D4</td>" & vbCrLf)
sb.Append("</tr>" & vbCrLf)
sb.Append("<tr>" & vbCrLf)
sb.Append("<td>Cella A5</td><td>Cella B5</td><td>Cella C5</td><td>Cella D5</td>" & vbCrLf)
sb.Append("</tr>" & vbCrLf)
sb.Append("</table>" & vbCrLf)
output = sb.ToString()

'Prepara e invia la risposta HTTP
Response.ContentType = "application/vnd.ms-excel"
Response.AppendHeader("Content-Disposition", "attachment; filename=" & fileName)
Response.Write(output)
Response.End()

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi