O caminho de download é ocultado passando um ID no banco de dados e, em seguida, lendo o caminho no banco de dados por meio do ID passado em outra página.
1. Método implementado em c# (é necessário apenas o código .ASPX.CS)
string sel_sql="selecione FileVisualPath de TabMailAttachFiles onde 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(Arquivo.Exists(destFileName))
{
FileInfo fi = new FileInfo(destFileName);
Response.Clear();
Response.ClearHeaders();
Resposta.Buffer = falso;
//Response.AppendHeader("Content-Disposition","attachment;filename=" +HttpUtility.UrlEncode(Path.GetFileName(destFileName),System.Text.Encoding.Default));
Response.AppendHeader("Disposição de conteúdo","anexo;nome do arquivo=" +HttpUtility.UrlEncode(Path.GetFileName(destFileName),System.Text.Encoding.UTF8));
Response.AppendHeader("Content-Length",fi.Length.ToString());
Response.ContentType="aplicativo/octeto-stream";
Response.WriteFile(destFileName);
Response.Flush();
Response.End();
}
outro
{
Response.Write("<script langauge=javascript>alert('Arquivo não existe!');history.go(-1);</script>");
Response.End();
}
2. Método de implementação em ASP
<!--#include file="conn.asp" -->
<%
Resposta.Buffer = verdadeiro
Resposta.Limpar
URL escuro
Dim fso,fl,flsize
dimDname
Dim objStream,ContentType,flName,isre,url1
'****************************************** é passado ao chamar o arquivo de download nome
m_ID=trim(request.QueryString("ID"))
definir rs=Server.CreateObject("adodb.recordset")
sql="select * from dataview onde xsf=true e id="&m_ID
rs.open sql,conn,1,1
se não rs.eof então
Dnome=rs("caminho")
outro
Response.Write("não encontrado")
Resposta.fim
terminar se
rs.close:set rs=nada
'********************************************** ****************
Se Dnome<>"" Então
'******************************Diretório do servidor onde os arquivos baixados são armazenados
url=Servidor.MapPath(Dnome)
outro
Response.Write("não encontrado")
Resposta.fim
Terminar se
Definir fso=Server.CreateObject("Scripting.FileSystemObject")
Definir fl=fso.getfile(url)
flsize=fl.tamanho
flNome=fl.nome
Definir fl=Nada
Definir fso=Nada
Definir objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 1
url objStream.LoadFromFile
Selecione Caso lcase(Right(flName, 4))
Caso ".asf"
ContentType = "vídeo/x-ms-asf"
Caso ".avi"
ContentType = "vídeo/avi"
Caso ".doc"
ContentType = "aplicativo/msword"
Caso ".zip"
ContentType = "aplicativo/zip"
Caso ".xls"
ContentType = "aplicativo/vnd.ms-excel"
Caso ".gif"
ContentType = "imagem/gif"
Caso ".jpg", "jpeg"
ContentType = "imagem/jpeg"
Caso ".bmp"
ContentType = "imagem/bmp"
Caso ".ppt"
ContentType = "application/vnd.ms-powerpoint"
Caso ".mdb"
ContentType = "aplicativo/x-msaccess"
Caso ".wav"
ContentType = "áudio/wav"
Caso ".mp3"
ContentType = "áudio/mpeg3"
Caso ".mpg", "mpeg"
ContentType = "vídeo/mpeg"
Caso ".rtf"
ContentType = "aplicativo/rtf"
Caso ".htm", "html"
ContentType = "texto/html"
Caso ".txt"
ContentType = "texto/simples"
Outro caso
ContentType = "aplicativo/fluxo de octetos"
Finalizar seleção
Response.AddHeader "Disposição de conteúdo", "anexo; nome do arquivo = "& flName
Response.AddHeader "Content-Length", flsize
Resposta.Charset = "UTF-8"
Response.ContentType = ContentType
Response.BinaryWrite objStream.Read
Resposta.Flush
resposta.Clear()
objStream.Fechar
Definir objStream = Nada
%>
Fonte: BLOG "Nuvens Perdidas no Céu Azul"