// ส่งออกไฟล์ฮาร์ดดิสก์ ให้การสนับสนุนการดาวน์โหลดไฟล์ขนาดใหญ่ ดาวน์โหลดต่อ จำกัดความเร็ว และการใช้ทรัพยากรขนาดเล็ก
//ป้อนพารามิเตอร์ _Request: วัตถุ Page.Request, _Response: วัตถุ Page.Response, _fileName: ชื่อไฟล์ดาวน์โหลด, _fullPath: เส้นทางการดาวน์โหลดพร้อมชื่อไฟล์, _speed จำนวนไบต์ที่อนุญาตให้ดาวน์โหลดต่อวินาที
// ส่งคืนว่าสำเร็จหรือไม่
บูลคงที่สาธารณะ ResponseFile (HttpRequest _Request, HttpResponse _Response, string _fileName, string _fullPath, long _speed)
-
พยายาม
-
FileStream myFile = FileStream ใหม่ (_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
BinaryReader br = BinaryReader ใหม่ (myFile);
พยายาม
-
_Response.AddHeader("ยอมรับช่วง", "ไบต์");
_Response.Buffer = เท็จ;
ยาว fileLength = myFile.Length;
ไบต์เริ่มต้นยาว = 0;
int pack = 10240; //10K ไบต์
//int sleep = 200; //5 ครั้งต่อวินาที นั่นคือ 5*10K ไบต์ต่อวินาที
int sleep = (int) Math.Floor (1,000 * แพ็ค / _speed) + 1;
ถ้า (_Request.Headers["Range"] != null)
-
_Response.รหัสสถานะ = 206;
string[] range = _Request.Headers["Range"].Split(อักขระใหม่[] {'=', '-'});
startBytes = Convert.ToInt64 (ช่วง [1]);
-
_Response.AddHeader("ความยาวเนื้อหา", (ความยาวไฟล์ - startBytes).ToString());
ถ้า (startBytes != 0)
-
_Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength-1, fileLength));
-
_Response.AddHeader("การเชื่อมต่อ", "Keep-Alive");
_Response.ContentType = "application/octet-stream";
_Response.AddHeader("การจัดการเนื้อหา", "ไฟล์แนบ; filename=" + HttpUtility.UrlEncode(_fileName,System.Text.Encoding.UTF8) );
br.BaseStream.Seek (startBytes, SeekOrigin.Begin);
int maxCount = (int) Math.Floor((fileLength - startBytes) / pack) + 1;
for (int i = 0; i < maxCount; i++)
-
ถ้า (_Response.IsClientConnected)
-
_Response.BinaryWrite (br.ReadBytes (แพ็ค));
Thread.Sleep(นอน);
-
อื่น
-
i=จำนวนสูงสุด;
-
-
-
จับ
-
กลับเท็จ;
-
ในที่สุด
-
br.ปิด();
myFile.Close();
-
-
จับ
-
กลับเท็จ;
-
กลับเป็นจริง;
-
ตัวอย่างการโทร
Page.Response.Clear();
ความสำเร็จของบูล = ResponseFile(Page.Request, Page.Response, "ชื่อไฟล์", @"C:download.date", 1024000);
ถ้า(!ความสำเร็จ)
Response.Write("เกิดข้อผิดพลาดในการดาวน์โหลดไฟล์!")
;