ในการผลิตเว็บไซต์มักจำเป็นต้องพัฒนาฟังก์ชั่นการดาวน์โหลดไฟล์ มีสามวิธี:
1. รหัสดาวน์โหลด ASP
-
ชื่อไฟล์ = Request.QueryString("ชื่อไฟล์")
ถ้า filename = "" แล้ว
Response.Write "โปรดป้อนพารามิเตอร์ชื่อไฟล์และระบุชื่อไฟล์ที่ดาวน์โหลด"
อื่น
Response.ContentType = "แอปพลิเคชัน/octet-สตรีม"
Response.AddHeader "การจัดการเนื้อหา", "ไฟล์แนบ; ชื่อไฟล์ =" & ชื่อไฟล์
ตั้งค่า FileStream = Server.CreateObject("Adodb.Stream")
FileStream โหมด = 3
FileStream.Type = 1
FileStream.เปิด
FileStream.LoadFromFile ( Server.MapPath (ชื่อไฟล์))
Response.BinaryWrite ( FileStream.Read )
FileStream.Close ()
ตั้งค่า FileStream = ไม่มีเลย
สิ้นสุดถ้า
%>บันทึกโค้ดด้านบนลงในไฟล์ประเภท asp และใช้เช่น: download.asp?filename=a.gif
2. ใช้เว็บไคลเอ็นต์
เพิ่มรหัสต่อไปนี้ลงในเหตุการณ์ปุ่มดาวน์โหลด
System.Net.WebClient wc = System.Net.WebClient ใหม่ ();
wc.DownloadFile( " โค้ดด้านบนจะดาวน์โหลดไฟล์ a.gif ฝั่งเซิร์ฟเวอร์ไปยังไดรฟ์ c ของไคลเอ็นต์โดยไม่มีการแจ้งเตือนใดๆ มันค่อนข้างน่ากลัวหากไม่มีการแจ้งเตือนใดๆ แต่บางครั้งก็จำเป็นต้องทำเช่นนี้ โค้ดนี้ยังสามารถใช้ได้ เรียกใช้โปรแกรมบนเดสก์ท็อป
3. รหัสดาวน์โหลด ASP NET พร้อมพร้อมท์การดาวน์โหลด
//เปิดไฟล์เพื่อดาวน์โหลด
System.IO.FileStream r = System.IO.FileStream ใหม่ (ชื่อไฟล์, System.IO.FileMode.Open);
//กำหนดข้อมูลเบื้องต้น
Response.Buffer = เท็จ;
Response.AddHeader("การเชื่อมต่อ", "Keep-Alive");
Response.ContentType = "application/octet-stream";
Response.AddHeader("การจัดการเนื้อหา", "ไฟล์แนบ; filename=" + System.IO.Path.GetFileName(FileName));
Response.AddHeader("ความยาวเนื้อหา", r.Length.ToString());
ในขณะที่(จริง)
-
//เปิดพื้นที่บัฟเฟอร์
ไบต์ [] บัฟเฟอร์ = ไบต์ใหม่ [1024];
//อ่านข้อมูลไฟล์
int leng = r.Read (บัฟเฟอร์, 0, 1024);
if (leng == 0)//ปิดท้ายไฟล์
หยุดพัก;
ถ้า (leng == 1,024) // ความยาวข้อมูลไฟล์อ่านเท่ากับความยาวบัฟเฟอร์ และข้อมูลบัฟเฟอร์จะถูกเขียนโดยตรง
Response.BinaryWrite (บัฟเฟอร์);
อื่น
-
//อ่านข้อมูลไฟล์มีขนาดเล็กกว่าบัฟเฟอร์ กำหนดขนาดบัฟเฟอร์ใหม่ ใช้เพื่ออ่านบล็อกข้อมูลสุดท้ายของไฟล์เท่านั้น
ไบต์ [] b = ไบต์ใหม่ [leng];
สำหรับ (int i = 0; i < leng; i++)
b[i] = บัฟเฟอร์[i];
การตอบสนองBinaryWrite(b);
-
-
r.Close();//ปิดไฟล์ที่ดาวน์โหลดมา
Response.End(); //สิ้นสุดการดาวน์โหลดไฟล์ วิธีนี้มีกล่องพร้อมท์การดาวน์โหลด เพื่อให้เซิร์ฟเวอร์ทราบเมื่อการดาวน์โหลดเสร็จสิ้น