System.IO.Stream iStream = null;
// บัฟเฟอร์เพื่ออ่าน 10K ไบต์เป็นก้อน:
ไบต์ [] บัฟเฟอร์ = ไบต์ใหม่ [10240];
//ความยาวของไฟล์:
ความยาว int;
// จำนวนไบต์ทั้งหมดที่จะอ่าน:
ข้อมูลยาวเพื่ออ่าน;
// ระบุไฟล์ที่จะดาวน์โหลดรวมถึงเส้นทางของมัน
string filepath = @"E:softwareSQL Server 2000 Personal Edition.ISO";
// ระบุชื่อไฟล์
ชื่อไฟล์สตริง = System.IO.Path.GetFileName (เส้นทางไฟล์);
พยายาม
-
//เปิดไฟล์.
iStream = System.IO.FileStream ใหม่ (พาธไฟล์, System.IO.FileMode.Open,
System.IO.FileAccess.Read,System.IO.FileShare.Read);
การตอบสนอง.Clear();
// จำนวนไบต์ทั้งหมดที่จะอ่าน:
dataToRead = iStream.Length;
ยาว p = 0;
if(Request.Headers["ช่วง"]!=null)
-
Response.StatusCode = 206;
p = long.Parse( Request.Headers["Range"].Replace("bytes=","").Replace("-", ""));
-
ถ้า(พี != 0)
-
Response.AddHeader("ช่วงเนื้อหา", "ไบต์" + p.ToString() + "-" + ((ยาว)(dataToRead - 1)).ToString() + "/" + dataToRead.ToString());
-
Response.AddHeader("ความยาวเนื้อหา",((ยาว)(dataToRead-p)).ToString());
Response.ContentType = "application/octet-stream";
Response.AddHeader("การจัดการเนื้อหา", "ไฟล์แนบ; filename=" + System.Web.HttpUtility.UrlEncode(Request.ContentEncoding.GetBytes(ชื่อไฟล์)));
iStream.Position = p;
dataToRead = dataToRead - p;
// อ่านไบต์
ในขณะที่ (dataToRead > 0)
-
// ตรวจสอบว่าไคลเอนต์เชื่อมต่ออยู่
ถ้า (Response.IsClientConnected)
-
// อ่านข้อมูลในบัฟเฟอร์
length = iStream.Read (บัฟเฟอร์, 0, 10240);
// เขียนข้อมูลไปยังเอาต์พุตสตรีมปัจจุบัน
Response.OutputStream.Write (บัฟเฟอร์, 0, ความยาว);
// ล้างข้อมูลไปยังเอาต์พุต HTML
การตอบสนองฟลัช();
บัฟเฟอร์ = ไบต์ใหม่ [10240];
dataToRead = dataToRead - ความยาว;
-
อื่น
-
//ป้องกันการวนซ้ำไม่สิ้นสุดหากผู้ใช้ตัดการเชื่อมต่อ
ข้อมูลที่จะอ่าน = -1;
-
-
-
catch (ข้อยกเว้น เช่น)
-
// ดักจับข้อผิดพลาด ถ้ามี
Response.Write("ข้อผิดพลาด : " + ex.Message);
-
ในที่สุด
-
ถ้า (iStream != null)
-
//ปิดไฟล์.
iStream.ปิด();
-
การตอบสนองสิ้นสุด();
-