Lo que podés hacer es guardar los archivos en una carpeta por fuera de la carpeta del directorio virtual (osea, que no sea accesible mediante una URL).
Para el ejemplo que te paso, lo datos serían los siguientes:
El sitio está en c:\inetpub\wwwroot\
La carpeta que almacena los PDF's está en c:\inetpub\docs\ (la carpeta 'docs', y su contenido, ya no son accesibles al navegador).
Luego, con este script que saqué de
www.aspfaq.com, lo lográs pasándole el nombre del archivo por querystring (paginadedescargas.asp?fn=archivoabajar.pdf)
Código:
<%
fn = Request.QueryString("fn")
If fn <> "" then
Response.ContentType = "application/x-unknown" ' arbitrary
FPath = "c:\inetpub\docs\" & fn
Response.AddHeader "Content-Disposition","attachment; filename=" & fn
Set adoStream = CreateObject("ADODB.Stream")
adoStream.Open()
adoStream.Type = 1
adoStream.LoadFromFile(FPath)
Response.BinaryWrite adoStream.Read()
adoStream.Close
Set adoStream = Nothing
Else
Response.Write "no jodas, no vas a encontrar nada... jetón!"
End if
Response.End
%>
saludos