<%
'mostra via servidor que o response.addheader será aplicado para download
response.AddHeader "Content-Type","application/x-msdownload"
'mostramos o arquivo que será feito o download, independente de sua extensão
'usaremos no exemplo: arquivo.pdf
response.AddHeader "Content-Disposition","attachment; filename=arquivo.pdf"
Response.Flush
Response.Buffer = True
Const adTypeBinary = 1
'leremos abaixo o arquivo em modo binário através do ADODB
Set binario = Server.CreateObject("ADODB.Stream")
binario.Open
binario.Type = adTypeBinary
'Informe aqui o caminho completo do arquivo no servidor
' Se preferir, use Server.MapPath("arquivo.pdf")
binario.LoadFromFile Server.MapPath("arquivo.pdf")
Response.BinaryWrite binario.Read
binario.Close
Set binario = Nothing
Response.Flush
%>
Não utilize query string do tipo arquivo.asp?nomedoarquivo=arquivo.extensão, pois utilizando querystring, qualquer usuário poderá mudar o nome e copiar vários arquivos do seu site, como o global.asa, banco de dados e etc. Utilize métodos de segurança ao utilizar o código asp acima.
Nota do André: Ainda não testei isso
Fonte: http://www.aspbrasil.com.br/conteudo/detalhesCompleta.aspx?codConteudo=3422&Secao=DICAS