คุณสามารถใช้การดาวน์โหลดแบบสตรีมมิ่ง (ใช้หน่วยความจำ ใช้น้อยลง) หรือไปที่ไฟล์โดยตรง
<%
Const USE_STREAM = 0 '0 ดาวน์โหลดโดยไม่มีสตรีม (Adodb.Stream) 1. ดาวน์โหลดด้วยสตรีม
Const ALLOW_FILE_EXT = "rar,zip,chm,doc,xls,swf,mp3,gif,jpg,jpeg,png,bmp" 'อนุญาตให้ขยายไฟล์ที่ดาวน์โหลดเพื่อป้องกันไม่ให้ซอร์สโค้ดถูกดาวน์โหลด
Dim sDownFilePath 'ดาวน์โหลดไฟล์พาธ
sDownFilePath = Trim(คำขอ("FilePath"))
'หรือรับเส้นทางของไฟล์จากฐานข้อมูลตาม ID ไฟล์ที่ส่งผ่าน
' หาก sDownFilePath เป็นเส้นทางที่แน่นอน ตรวจสอบให้แน่ใจว่าได้แปลง sDownFilePath เป็นเส้นทางสัมพัทธ์กับไฟล์นี้ 'sDownFilePath
= "focus.swf"
Call DownloadFile(sDownFilePath)
Function DownloadFile (s_DownFilePath )
'ตรวจสอบว่าชื่อไฟล์ถูกส่งผ่านหรือไม่
ถ้า IsNull(s_DownFilePath) = True หรือ Trim(s_DownFilePath) = "" จากนั้น
OutputErr "ข้อผิดพลาด: ขั้นแรกให้กำหนดไฟล์ที่จะดาวน์โหลด การดาวน์โหลดล้มเหลว"
สิ้นสุด ถ้า
'ตรวจสอบว่าส่วนขยายนั้นถูกกฎหมายหรือไม่
Dims_FileExt
s_FileExt = Mid(s_DownFilePath, InstrRev(s_DownFilePath, ".")+1)
ถ้า InStr("," & ALLOW_FILE_EXT & ",", "," & s_FileExt & ",") <= 0 แล้ว
OutputErr "ข้อผิดพลาด: ประเภทไฟล์ (" & s_FileExt & ") ไม่ได้รับอนุญาตให้ดาวน์โหลด และการดาวน์โหลดล้มเหลว"
สิ้นสุดถ้า
s_DownFilePath =แทนที่(s_DownFilePath, "", "/")
'ด้วยเหตุผลด้านความปลอดภัย การดาวน์โหลดไฟล์เป็นสิ่งต้องห้ามในบางไดเร็กทอรีและจัดการที่นี่
-
'ตรวจสอบว่าเซิร์ฟเวอร์รองรับ fso หรือไม่'
ดิม o_Fso
เมื่อเกิดข้อผิดพลาด ดำเนินการต่อต่อไป
ตั้ง o_Fso = Server.CreateObject("Scripting.FileSystemObject")
ถ้า Err.Number <> 0 แล้ว
ผิดพลาด.เคลียร์
OutputErr "ข้อผิดพลาด: เซิร์ฟเวอร์ไม่รองรับส่วนประกอบ fso และการดาวน์โหลดล้มเหลว"
สิ้นสุด ถ้า
'รับชื่อไฟล์ ขนาดไฟล์'
Dims_FileMapPath
หรี่แสง o_File, s_FileName, n_FileLength
s_FileMapPath = เซิร์ฟเวอร์ MapPath (s_DownFilePath)
ถ้า (o_Fso.FileExists(s_FileMapPath)) = True จากนั้น
ตั้งค่า o_File = o_Fso.GetFile(s_FileMapPath)
s_FileName = o_File.Name
n_FileLength = o_File.Size
o_File.ปิด
อื่น
OutputErr "ข้อผิดพลาด: ไม่มีไฟล์อยู่ ดาวน์โหลดล้มเหลว"
สิ้นสุดถ้า
Set o_Fso = Nothing
'ตรวจสอบว่าขนาดไฟล์ที่ดาวน์โหลดเกินขีดจำกัดหรือไม่
-
'หากไม่ได้ดาวน์โหลดผ่านสตรีม ให้ไปที่ไฟล์โดยตรง
ถ้า USE_STREAM = 0 แล้ว
การตอบสนอง เปลี่ยนเส้นทาง sDownFilePath
การตอบกลับสิ้นสุด
สิ้นสุด ถ้า
'ตรวจสอบว่าเซิร์ฟเวอร์รองรับ Adodb.Stream หรือไม่
เมื่อเกิดข้อผิดพลาด ดำเนินการต่อต่อไป
ตั้งค่า o_Stream = Server.CreateObject("Adodb.Stream")
ถ้า Err.Number <> 0 แล้ว
ผิดพลาด.เคลียร์
OutputErr "ข้อผิดพลาด: เซิร์ฟเวอร์ไม่รองรับส่วนประกอบ Adodb.Stream และการดาวน์โหลดล้มเหลว"
สิ้นสุดถ้า
o_Stream.Tyep = 1
o_Stream.เปิด
o_Stream.LoadFromFile s_FileMapPath
Response.Buffer = จริง
การตอบสนองชัดเจน
Response.AddHeader "การจัดการเนื้อหา", "ไฟล์แนบ; ชื่อไฟล์ =" & s_FileName
Response.AddHeader "ความยาวเนื้อหา", n_FileLength
Response.CharSet = "UTF-8"
Response.ContentType = "แอปพลิเคชัน/octet-สตรีม"
การตอบสนอง BinaryWrite o_Stream.Read
การตอบสนองล้าง
o_Stream.Close
ตั้งค่า o_Stream = ไม่มี
ฟังก์ชันสิ้นสุด
Sub OutputErr (s_ErrMsg)
การตอบสนองเขียน "<font color=red>" & s_ErrMsg & "</font>"
การตอบสนองสิ้นสุด
จบย่อย
%>
http://www.cnblogs.com/jiny-z/archive/2006/08/29/489102.html