// Keluarkan file hard disk, berikan dukungan pengunduhan untuk file besar, lanjutkan pengunduhan, batas kecepatan, dan penggunaan sumber daya kecil
//Parameter masukan _Request: Objek Page.Request, _Response: Objek Page.Response, _fileName: Nama file unduhan, _fullPath: Jalur unduhan dengan nama file, _speed Jumlah byte yang diizinkan untuk diunduh per detik
// Kembalikan apakah berhasil
bool statis publik ResponseFile(HttpRequest _Request,HttpResponse _Response,string _fileName,string _fullPath, long _speed)
{
mencoba
{
FileStream myFile = FileStream baru(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
BinaryReader br = BinaryReader baru(file saya);
mencoba
{
_Response.AddHeader("Rentang Terima", "byte");
_Respon.Buffer = salah;
panjang fileLength = myFile.Length;
startBytes panjang = 0;
int paket = 10240; //10K byte
//int sleep = 200; //5 kali per detik, yaitu 5*10K byte per detik
int tidur = (int)Matematika.Lantai(1000 * paket / _kecepatan) + 1;
if (_Request.Headers["Rentang"] != null)
{
_Respon.StatusCode = 206;
string[] rentang = _Request.Headers["Rentang"].Split(karakter baru[] {'=', '-'});
startBytes = Konversi.ToInt64(kisaran[1]);
}
_Response.AddHeader("Panjang Konten", (Panjang File - startBytes).ToString());
jika (startBytes != 0)
{
_Response.AddHeader("Rentang Konten", string.Format(" byte {0}-{1}/{2}", startBytes, panjang file-1, panjang file));
}
_Response.AddHeader("Koneksi", "Tetap Hidup");
_Response.ContentType = "aplikasi/aliran oktet";
_Response.AddHeader("Disposisi Konten","attachment;filename=" + HttpUtility.UrlEncode(_fileName,System.Text.Encoding.UTF8) );
br.BaseStream.Seek(startBytes, SeekOrigin.Begin);
int maxCount = (int) Math.Floor((panjang file - startBytes) / paket) + 1;
untuk (int i = 0; i < maxCount; i++)
{
jika (_Response.IsClientConnected)
{
_Response.BinaryWrite(br.ReadBytes(paket));
Thread.Sleep(tidur);
}
kalau tidak
{
i=hitungan maksimal;
}
}
}
menangkap
{
kembali salah;
}
Akhirnya
{
br.Tutup();
myFile.Tutup();
}
}
menangkap
{
kembali salah;
}
kembali benar;
}
Panggil contoh
Page.Response.Clear();
bool sukses = ResponseFile(Page.Request, Page.Response, "nama file", @"C:download.date", 1024000);
jika(!sukses)
Response.Write("Kesalahan saat mengunduh file!");
Halaman.Response.End();