System.IO.Stream iStream = ноль;
// Буфер для чтения фрагментов размером 10 КБ:
буфер байт[] = новый байт[10240];
// Длина файла:
длина целого числа;
// Всего байтов для чтения:
длинные данныеToRead;
// Определите файл для загрузки, включая его путь.
строка 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);
Ответ.Очистить();
// Всего байтов для чтения:
dataToRead = iStream.Length;
длинный р = 0;
if(Request.Headers["Диапазон"]!=ноль)
{
КодОтвета.Состояние = 206;
p = long.Parse( Request.Headers["Диапазон"].Replace("bytes=","").Replace("-",""));
}
если (р != 0)
{
Response.AddHeader("Content-Range","bytes " + p.ToString() + "-" + ((long)(dataToRead - 1)).ToString() + "/" + dataToRead.ToString());
}
Response.AddHeader("Content-Length",((long)(dataToRead-p)).ToString());
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(Request.ContentEncoding.GetBytes(filename)));
iStream.Position = р;
данныеToRead = данныеToRead - p;
// Читаем байты.
пока (dataToRead > 0)
{
// Проверяем, что клиент подключен.
если (Response.IsClientConnected)
{
// Читаем данные в буфере.
длина = iStream.Read(буфер, 0, 10240);
// Записываем данные в текущий выходной поток.
Response.OutputStream.Write(буфер, 0, длина);
// Сбрасываем данные в вывод HTML.
Ответ.Смыв();
буфер = новый байт [10240];
dataToRead = dataToRead - длина;
}
еще
{
//предотвращаем бесконечный цикл, если пользователь отключается
данныеToRead = -1;
}
}
}
поймать (Исключение ex)
{
// Перехватываем ошибку, если она есть.
Response.Write("Ошибка: " + ex.Message);
}
окончательно
{
если (iStream!= ноль)
{
//Закрываем файл.
iStream.Закрыть();
}
Ответ.Конец();
}