Untuk jendela baru yang terbuka saat pengunduhan dan harus ditutup setelah pengunduhan: ini efektif untuk file yang lebih kecil:
System.IO.FileInfo file = new System.IO.FileInfo("F:\mp3\mp3\Jangan menangis orang kesayanganku.mp3");
Respon.Hapus();
Respon.ClearHeaders();
Respon.Buffer = false;
Respon.Charset="GB2312";
Response.ContentEncoding=System.Text.Encoding.UTF8;
Response.ContentType = "aplikasi/aliran oktet";
Response.AddHeader("Content-Disposition", "attachment; filename="+Server.UrlEncode("Jangan menangis orang kesayanganku.mp3"));
Response.AddHeader("Panjang Konten", file.Panjang.ToString());
Respon.WriteFile(file.Nama Lengkap);
Respon.Flush();
Respon.End();
Kode ini dapat menampilkan file dan menutup formulir yang baru dibuka.
Untuk file berukuran besar sebaiknya tidak menggunakan kode di atas, karena kode di atas dikeluarkan setelah semua file di-cache di server. Jika server Anda memiliki lalu lintas padat dan file berukuran besar, tidak disarankan menggunakan cara di atas .
Saya telah menguji yang berikut ini dan tampaknya berfungsi lebih baik:
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 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;
}
}
_Respon.Siram();
}
menangkap
{
kembali salah;
}
Akhirnya
{
br.Tutup();
myFile.Tutup();
}
}
menangkap
{
kembali salah;
}
kembali benar;
}
Kode semacam ini juga tersedia di Internet, juga dapat menampilkan file dan menutup formulir jendela yang baru dibuka.
Selain itu, selama pengujian, ditemukan bahwa beberapa hal yang tidak terduga akan terjadi jika sistem operasi server dan klien berbeda. Secara umum, menggunakan Jika kode di atas tidak dapat ditutup secara normal, Anda dapat memeriksa pengaturan browser di Tingkat Lanjut.
Selain itu, Anda dapat memodifikasi tipe konten keluaran yang berbeda Response.ContentType = "application/octet-stream";
Jika Anda punya ide, silakan balas.
http://www.cnblogs.com/tour-code/archive/2006/10/25/539257.html