It’s a common scenario: user needs to download a file from the server by clicking link or a button in your ASPX page. The server-side code for this is pretty straightforward and looks something like this:
Sub DownloadFile(ByVal i_sServerPath As String, ByVal i_sDisplayName As String) Dim oFile As FileInfo = New FileInfo(i_sServerPath) With Response .Clear() .ClearHeaders() .AddHeader("Content-Length", oFile.Length.ToString()) .ContentType = ReturnContentType(oFile.Extension.ToLower()) .AddHeader("Content-Disposition", "attachment; filename=" & i_sDisplayName) .TransmitFile(oFile.FullName) .End() End With End Sub
The code accepts 2 parameters: i_sServerPath – full path to the file on the server and i_sDisplayName – file name that will be displayed to the user in the “Save As” dialog. Code also populates response headers based on file information. I use this handy function to populate ContentType based on file extention:
Function ReturnContentType(ByVal i_sfileExtension As String) As String Select Case i_sfileExtension Case ".htm", ".html", ".log" : Return "text/HTML" Case ".txt" : Return "text/plain" Case ".doc" : Return "application/ms-word" Case ".tiff", ".tif" : Return "image/tiff" Case ".asf" : Return "video/x-ms-asf" Case ".avi" : Return "video/avi" Case ".zip" : Return "application/zip" Case ".xls", ".csv" : Return "application/vnd.ms-excel" Case ".gif" : Return "image/gif" Case ".jpg", "jpeg" : Return "image/jpeg" Case ".bmp" : Return "image/bmp" Case ".wav" : Return "audio/wav" Case ".mp3" : Return "audio/mpeg3" Case ".mpg", "mpeg" : Return "video/mpeg" Case ".rtf" : Return "application/rtf" Case ".asp" : Return "text/asp" Case ".pdf" : Return "application/pdf" Case ".fdf" : Return "application/vnd.fdf" Case ".ppt" : Return "application/mspowerpoint" Case ".dwg" : Return "image/vnd.dwg" Case ".msg" : Return "application/msoutlook" Case ".xml", ".sdxl" : Return "application/xml" Case ".xdp" : Return "application/vnd.adobe.xdp+xml" Case Else : Return "application/octet-stream" End Select End Function
It’s all good, but what if you need to delete the file from the server immediately after user downloaded it? Continue reading →