Created
September 28, 2023 14:03
-
-
Save evagoras/b0de0f16ea33e0f44a7fa703292774b5 to your computer and use it in GitHub Desktop.
Downloading any file using ASP, FSO and the ADODB Stream object
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<%@Language="VBScript"%> | |
<%Option Explicit%> | |
<%Response.Buffer = True%> | |
<% | |
On Error Resume Next | |
Dim strPath | |
strPath = CStr(Request.QueryString("file")) | |
'-- do some basic error checking for the QueryString | |
If strPath = "" Then | |
Response.Clear | |
Response.Write("No file specified.") | |
Response.End | |
ElseIf InStr(strPath, "..") > 0 Then | |
Response.Clear | |
Response.Write("Illegal folder location.") | |
Response.End | |
ElseIf Len(strPath) > 1024 Then | |
Response.Clear | |
Response.Write("Folder path too long.") | |
Response.End | |
Else | |
Call DownloadFile(strPath) | |
End If | |
Private Sub DownloadFile(file) | |
'--declare variables | |
Dim strAbsFile | |
Dim strFileExtension | |
Dim objFSO | |
Dim objFile | |
Dim objStream | |
'-- set absolute file location | |
strAbsFile = Server.MapPath(file) | |
'-- create FSO object to check if file exists and get properties | |
Set objFSO = Server.CreateObject("Scripting.FileSystemObject") | |
'-- check to see if the file exists | |
If objFSO.FileExists(strAbsFile) Then | |
Set objFile = objFSO.GetFile(strAbsFile) | |
'-- first clear the response, and then set the appropriate headers | |
Response.Clear | |
'-- the filename you give it will be the one that is shown | |
' to the users by default when they save | |
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 | |
'-- set as binary | |
objStream.Type = 1 | |
Response.CharSet = "UTF-8" | |
'-- load into the stream the file | |
objStream.LoadFromFile(strAbsFile) | |
'-- send the stream in the response | |
Response.BinaryWrite(objStream.Read) | |
objStream.Close | |
Set objStream = Nothing | |
Set objFile = Nothing | |
Else 'objFSO.FileExists(strAbsFile) | |
Response.Clear | |
Response.Write("No such file exists.") | |
End If | |
Set objFSO = Nothing | |
End Sub | |
%> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
https://evagoras.com/2011/02/08/downloading-any-file-using-asp-fso-and-the-adodb-stream-object/