La ruta de descarga se oculta pasando una ID en la base de datos y luego leyendo la ruta en la base de datos a través de la ID pasada en otra página.
1. Método implementado en c# (solo se requiere el código de .ASPX.CS)
string sel_sql="seleccione FileVisualPath de TabMailAttachFiles donde FileID="+Request.QueryString[
"destFileName"].ToString(); // string destFileName = Request.QueryString["destFileName"]!=null?Request.QueryString["destFileName" ]:"";
string destFileName=ROA.Components.fune_commerce.Execad(sel_sql).Tables[0].Rows[0][0].ToString();
destFileName = Server.MapPath(".")+destFileName;
destFileName = Server.UrlDecode(destFileName);
if(Archivo.Existe(destFileName))
{
FileInfo fi = new FileInfo(destFileName);
Respuesta.Clear();
Respuesta.ClearHeaders();
Respuesta.Buffer = falso;
//Response.AppendHeader("Content-Disposition","attachment;filename=" +HttpUtility.UrlEncode(Path.GetFileName(destFileName),System.Text.Encoding.Default));
Response.AppendHeader("Content-Disposition","attachment;filename=" +HttpUtility.UrlEncode(Path.GetFileName(destFileName),System.Text.Encoding.UTF8));
Response.AppendHeader("Contenido-Longitud",fi.Length.ToString());
Response.ContentType="aplicación/octeto-stream";
Response.WriteFile(destFileName);
Respuesta.Flush();
Respuesta.End();
}
demás
{
Response.Write("<script langauge=javascript>alert('¡El archivo no existe!');history.go(-1);</script>");
Respuesta.End();
}
2. Método de implementación en ASP
<!--#include file="conn.asp" -->
<%
Respuesta.Buffer = verdadero
Respuesta.Borrar
URL oscura
Dim fso,fl,flsize
nombreDim
Dim objStream,ContentType,flName,isre,url1
'****************************************** se pasa al llamar al archivo de descarga nombre
m_ID=recortar(solicitud.QueryString("ID"))
establecer rs=Server.CreateObject("adodb.recordset")
sql="seleccione * de la vista de datos donde xsf=true e id="&m_ID
rs.open sql, conexión, 1,1
si no rs.eof entonces
Nombre=rs("ruta")
demás
Respuesta.Escribir("no encontrado")
Respuesta.fin
terminar si
rs.close: establecer rs = nada
'************************************************ * ****************
Si Nombre<>"" Entonces
'******************************Directorio del servidor donde se almacenan los archivos descargados
url=Servidor.MapPath(Nombre)
demás
Respuesta.Escribir("no encontrado")
Respuesta.fin
Terminar si
Establecer fso=Server.CreateObject("Scripting.FileSystemObject")
Establecer fl=fso.getfile(url)
flsize=fl.tamaño
flName=fl.nombre
Establecer fl=Nada
Establecer fso=Nada
Establecer objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Tipo = 1
URL objStream.LoadFromFile
Seleccione Caso lcase(Derecha(flName, 4))
Caso ".asf"
Tipo de contenido = "vídeo/x-ms-asf"
Caso ".avi"
Tipo de contenido = "vídeo/avi"
Caso ".doc"
ContentType = "aplicación/msword"
Caso ".zip"
ContentType = "aplicación/zip"
Caso ".xls"
ContentType = "aplicación/vnd.ms-excel"
Caso ".gif"
Tipo de contenido = "imagen/gif"
Caso ".jpg", "jpeg"
Tipo de contenido = "imagen/jpeg"
Caso ".bmp"
Tipo de contenido = "imagen/bmp"
Caso ".ppt"
ContentType = "aplicación/vnd.ms-powerpoint"
Caso ".mdb"
ContentType = "aplicación/x-msaccess"
Caso ".wav"
Tipo de contenido = "audio/wav"
Caso ".mp3"
Tipo de contenido = "audio/mpeg3"
Caso ".mpg", "mpeg"
Tipo de contenido = "vídeo/mpeg"
Caso ".rtf"
Tipo de contenido = "aplicación/rtf"
Caso ".htm", "html"
Tipo de contenido = "texto/html"
Caso ".txt"
ContentType = "texto/sin formato"
Caso más
ContentType = "aplicación/flujo de octetos"
Finalizar selección
Response.AddHeader "Disposición de contenido", "adjunto; nombre de archivo=" & flName
Response.AddHeader "Contenido-Longitud", flsize
Respuesta.Charset = "UTF-8"
Respuesta.ContentType = Tipo de contenido
Respuesta.BinaryWrite objStream.Read
Respuesta.Flush
respuesta.Borrar()
objStream.Cerrar
Establecer objStream = Nada
%>
Fuente: BLOG "Nubes Perdidas en el Cielo Azul"