يتم إخفاء مسار التنزيل عن طريق تمرير معرف في قاعدة البيانات، ثم قراءة المسار في قاعدة البيانات من خلال المعرف الذي تم تمريره في صفحة أخرى.
1. الطريقة المطبقة في c# (مطلوب كود .ASPX.CS فقط)
string sel_sql="select FileVisualPath from TabMailAttachFiles Where 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);
إذا (File.Exists(destFileName))
{
FileInfo fi = new FileInfo(destFileName);
استجابة. واضح ()؛
Response.ClearHeaders();
Response.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);
Response.Flush();
Response.End();
}
آخر
{
Response.Write("<script langauge=javascript>alert('الملف غير موجود!');history.go(-1);</script>");
Response.End();
}
2. طريقة التنفيذ في ASP
<!--#include file="conn.asp" -->
<%
Response.Buffer = صحيح
الاستجابة.واضحة
عنوان URL خافت
خافت fso، fl، flsize
dimDname
Dim objStream,ContentType,flName,isre,url1
'****************************************** يتم تمريره عند استدعاء ملف التنزيل اسم
m_ID=trim(request.QueryString("ID"))
مجموعة rs=Server.CreateObject("adodb.recordset")
sql = "اختر * من dataview حيث xsf = true وid = "&m_ID
rs.open SQL، كون، 1،1
إن لم يكن rs.eof ثم
اسم = آر إس ("المسار")
آخر
الاستجابة.كتابة("لم يتم العثور عليه")
الاستجابة.نهاية
نهاية إذا
rs. Close:set rs = لا شيء
'********************************************************************************************************************************************************************************* * ****************
إذا كان Dname<>"" إذن
'*********************************دليل الخادم حيث يتم تخزين الملفات التي تم تنزيلها
url=Server.MapPath(Dname)
آخر
الاستجابة.كتابة("لم يتم العثور عليه")
الاستجابة.نهاية
نهاية إذا
تعيين fso=Server.CreateObject("Scripting.FileSystemObject")
تعيين fl=fso.getfile(url)
flsize=fl.size
flName=fl.name
تعيين فلوريدا = لا شيء
تعيين fso=لا شيء
تعيين objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 1
objStream.LoadFromFile URL
حدد حالة lcase(Right(flName, 4))
الحالة ".asf"
نوع المحتوى = "فيديو/x-ms-asf"
الحالة ".avi"
نوع المحتوى = "فيديو/افي"
الحالة ".doc"
نوع المحتوى = "التطبيق/msword"
الحالة ".zip"
نوع المحتوى = "التطبيق/الرمز البريدي"
الحالة ".xls"
نوع المحتوى = "التطبيق/vnd.ms-excel"
الحالة ".gif"
نوع المحتوى = "صورة/gif"
حالة ".jpg"، "jpeg"
نوع المحتوى = "صورة/jpeg"
الحالة ".bmp"
نوع المحتوى = "صورة/bmp"
الحالة ".ppt"
نوع المحتوى = "التطبيق/vnd.ms-powerpoint"
الحالة ".mdb"
نوع المحتوى = "التطبيق/x-msaccess"
الحالة ".wav"
نوع المحتوى = "الصوت/الرعايا"
حالة ".mp3"
نوع المحتوى = "الصوت/mpeg3"
حالة ".mpg"، "mpeg"
نوع المحتوى = "فيديو/mpeg"
الحالة ".rtf"
نوع المحتوى = "التطبيق/rtf"
الحالة ".htm"، "html"
نوع المحتوى = "نص/أتش تي أم أل"
الحالة ".txt"
نوع المحتوى = "نص/عادي"
حالة أخرى
ContentType = "التطبيق/الدفق الثماني"
إنهاء التحديد
Response.AddHeader "ترتيب المحتوى"، "المرفق؛ اسم الملف =" & flName
Response.AddHeader "طول المحتوى"، flsize
Response.Charset = "UTF-8"
Response.ContentType = ContentType
Response.BinaryWrite objStream.Read
الاستجابة. فلوش
استجابة.مسح ()
objStream.Close
تعيين objStream = لا شيء
%>
المصدر: مدونة "الغيوم المفقودة في السماء الزرقاء".