Le chemin de téléchargement est masqué en transmettant un identifiant dans la base de données, puis en lisant le chemin dans la base de données via l'identifiant transmis sur une autre page.
1. Méthode implémentée en c# (seul le code de .ASPX.CS est requis)
string sel_sql="select FileVisualPath from TabMailAttachFiles où FileID="+Request.QueryString[
"destFileName"].ToString(); // string destFileName = Request.QueryString["destFileName"]!=null?Request.QueryString["destFileName" ]:"";
chaîne destFileName=ROA.Components.fune_commerce.Execad(sel_sql).Tables[0].Rows[0][0].ToString();
destFileName = Server.MapPath(".")+destFileName;
destFileName = Server.UrlDecode(destFileName);
if(File.Exists(destFileName))
{
FileInfo fi = new FileInfo(destFileName);
Réponse.Clear();
Réponse.ClearHeaders();
Réponse.Buffer = false ;
//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("Content-Length",fi.Length.ToString());
Response.ContentType="application/octet-stream";
Response.WriteFile(destFileName);
Réponse.Flush();
Réponse.End();
}
autre
{
Response.Write("<script langauge=javascript>alert('Le fichier n'existe pas !');history.go(-1);</script>");
Réponse.End();
}
2. Méthode d'implémentation dans ASP
<!--#include file="conn.asp" -->
<%
Réponse.Buffer = vrai
Réponse.Effacer
URL sombre
Dim fso,fl,fltaille
dimDname
Dim objStream, ContentType, flName, isre, url1
'****************************************** est transmis lors de l'appel du fichier de téléchargement nom
m_ID=trim(request.QueryString("ID"))
set rs=Server.CreateObject("adodb.recordset")
sql="select * from dataview où xsf=true et id="&m_ID
rs.open sql, conn, 1,1
sinon rs.eof alors
Dname=rs("chemin")
autre
Réponse.Write("aucun trouvé")
Réponse.end
finir si
rs.close:set rs=rien
'************************************************ * ****************
Si Nom<>"" Alors
'******************************Répertoire du serveur où sont stockés les fichiers téléchargés
url=Serveur.MapPath(Dname)
autre
Réponse.Write("aucun trouvé")
Réponse.end
Fin si
Définir fso=Server.CreateObject("Scripting.FileSystemObject")
Définir fl=fso.getfile(url)
flsize=fl.taille
flName=fl.nom
Définir fl=Rien
Définir fso=Rien
Définir objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 1
URL objStream.LoadFromFile
Sélectionnez Case lcase(Right(flName, 4))
Cas ".asf"
ContentType = "vidéo/x-ms-asf"
Cas ".avi"
ContentType = "vidéo/avi"
Cas ".doc"
ContentType = "application/msword"
Cas ".zip"
ContentType = "application/zip"
Cas ".xls"
ContentType = "application/vnd.ms-excel"
Cas ".gif"
Type de contenu = "image/gif"
Cas ".jpg", "jpeg"
Type de contenu = "image/jpeg"
Cas ".bmp"
Type de contenu = "image/bmp"
Cas ".ppt"
ContentType = "application/vnd.ms-powerpoint"
Cas ".mdb"
ContentType = "application/x-msaccess"
Cas ".wav"
Type de contenu = "audio/wav"
Cas ".mp3"
Type de contenu = "audio/mpeg3"
Cas ".mpg", "mpeg"
ContentType = "vidéo/mpeg"
Cas ".rtf"
ContentType = "application/rtf"
Cas ".htm", "html"
ContentType = "texte/html"
Cas ".txt"
ContentType = "texte/plain"
Autre cas
ContentType = "application/octet-stream"
Fin de la sélection
Response.AddHeader "Content-Disposition", "pièce jointe ; filename=" & flName
Response.AddHeader "Content-Length", flsize
Réponse.Charset = "UTF-8"
Réponse.ContentType = ContentType
Réponse.BinaryWrite objStream.Read
Réponse.Flush
réponse.Clear()
objStream.Fermer
Définir objStream = Rien
%>
Source : BLOG « Nuages perdus dans le ciel bleu »