งานต้นฉบับ: possible_Y ดาวน์โหลดจาก Times Classroom
ป้อนเส้นทาง URL ของไฟล์ doc, xls หรือ jpg โดยตรงในแถบที่อยู่ของเบราว์เซอร์ จากนั้นไฟล์จะแสดงในเบราว์เซอร์โดยตรง ในหลายกรณี เราหวังว่าจะแสดงกล่องข้อความดาวน์โหลดให้ผู้ใช้ดาวน์โหลดโดยตรง เราควรทำอย่างไร มีสองวิธีที่นี่:
1. ตั้งค่า iis และส่วนต่อท้ายแผนที่ของเซิร์ฟเวอร์ของคุณ เช่น doc
2. กำหนดประเภทเนื้อหาเมื่อส่งไปยังไคลเอนต์
วิธีที่ 2 มีรายละเอียดอธิบายด้านล่าง
<%
Response.Buffer = จริง
ตอบกลับ
ล้าง URL สลัว
หรี่ fso, fl, flsize
สลัวDname
หรี่ objStream,ContentType,flName,isre,url1
'****************************************** ถูกส่งผ่านเมื่อเรียกไฟล์ดาวน์โหลด ชื่อ
Dname=trim(คำขอ("n"))
'************************************************ * ****************
ถ้า Dname<>"" แล้ว
'******************************ไดเรกทอรีเซิร์ฟเวอร์ที่เก็บไฟล์ที่ดาวน์โหลดไว้
url=server.MapPath("/")&""&Dname
'************************************************ * *
สิ้นสุดถ้า
ตั้งค่า fso=Server.CreateObject("Scripting.FileSystemObject")
ตั้งค่า fl=fso.getfile(url)
flsize=fl.size
flName=fl.ชื่อ
ตั้ง fl=ไม่มีอะไร
ตั้งค่า fso=ไม่มีอะไร
-
-
ตั้ง objStream = Server.CreateObject("ADODB.Stream")
objStream.เปิด
objStream.Type = 1
objStream.LoadFromFile URL
เลือกกรณี lcase(Right(flName, 4))
กรณี ".asf"
ContentType = "วิดีโอ/x-ms-asf"
กรณี ".avi"
ContentType = "วิดีโอ/avi"
กรณี ".doc"
ContentType = "แอปพลิเคชัน/msword"
กรณี ".zip"
ContentType = "แอปพลิเคชัน/zip"
กรณี ".xls"
ประเภทเนื้อหา = "application/vnd.ms-excel"
กรณี ".gif"
ประเภทเนื้อหา = "รูปภาพ/gif"
ตัวพิมพ์ ".jpg", "jpeg"
ประเภทเนื้อหา = "รูปภาพ/jpeg"
กรณี ".wav"
ContentType = "เสียง/wav"
กรณี ".mp3"
ประเภทเนื้อหา = "เสียง/mpeg3"
กรณี ".mpg", "mpeg"
ContentType = "วิดีโอ/mpeg"
กรณี ".rtf"
ContentType = "แอปพลิเคชัน/rtf"
กรณี ".htm", "html"
ประเภทเนื้อหา = "ข้อความ/html"
กรณี ".txt"
ContentType = "ข้อความ/ธรรมดา"
กรณีอื่น
ContentType = "แอปพลิเคชัน/octet-สตรีม"
สิ้นสุดการเลือก
Response.AddHeader "การจัดการเนื้อหา", "ไฟล์แนบ; filename=" & flName
Response.AddHeader "ความยาวเนื้อหา", flsize
Response.Charset = "UTF-8"
Response.ContentType = ContentType
Response.BinaryWrite objStream.Read
การตอบสนองฟลัช
การตอบสนองเคลียร์()
objStream ปิด
ตั้งค่า objStream = Nothing
%>
บันทึกสิ่งต่อไปนี้ลงใน download.asp จากนั้นคุณสามารถใช้ <a herf=" http://www.downcodes.com/download.asp?n=file.doc">ดาวน์โหลด!</ a > หากต้องการดาวน์โหลดไฟล์ file.doc ในไดเร็กทอรีเดียวกัน
แต่มีปัญหาที่นี่ว่าการเขียนเส้นทาง file.doc โดยตรงใน URL ไม่ปลอดภัย ดังนั้นวิธีแก้ปัญหาควรบันทึกเส้นทาง file.doc ลงในฐานข้อมูลหลังจากค้นหา ฐานข้อมูลคุณสามารถรับเส้นทางได้
หากคุณเพิ่มการตัดสินที่ด้านหน้าของโปรแกรมนี้:
if instr(Request.ServerVariables("HTTP_REFERER"),"http://your domain name")=0 แล้ว
การตอบสนองสิ้นสุด
สิ้นสุดถ้า
สามารถป้องกันผู้อื่นจากการขโมยลิงก์ได้เป็นอย่างดี