System.IO.Stream iStream = null;
// 청크 단위로 10K 바이트를 읽기 위한 버퍼:
바이트[] 버퍼 = 새로운 바이트[10240];
// 파일 길이:
정수 길이;
// 읽을 총 바이트 수:
긴 데이터ToRead;
// 경로를 포함하여 다운로드할 파일을 식별합니다.
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);
응답.지우기();
// 읽을 총 바이트 수:
dataToRead = iStream.Length;
긴 p = 0;
if(Request.Headers["Range"]!=null)
{
응답.상태 코드 = 206;
p = long.Parse( Request.Headers["Range"].Replace("bytes=","").Replace("-",""));
}
if(p != 0)
{
Response.AddHeader("Content-Range","bytes " + p.ToString() + "-" + ((long)(dataToRead - 1)).ToString() + "/" + dataToRead.ToString());
}
Response.AddHeader("Content-Length",((long)(dataToRead-p)).ToString());
Response.ContentType = "응용 프로그램/옥텟 스트림";
Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(Request.ContentEncoding.GetBytes(filename)));
iStream.Position = p;
dataToRead = dataToRead - p;
// 바이트를 읽습니다.
동안(dataToRead > 0)
{
// 클라이언트가 연결되었는지 확인합니다.
if(Response.IsClientConnected)
{
// 버퍼의 데이터를 읽습니다.
length = iStream.Read(버퍼, 0, 10240);
// 현재 출력 스트림에 데이터를 씁니다.
Response.OutputStream.Write(버퍼, 0, 길이);
// 데이터를 HTML 출력으로 플러시합니다.
응답.플러시();
버퍼= 새 바이트[10240];
dataToRead = dataToRead - 길이;
}
또 다른
{
//사용자 연결이 끊어지면 무한 루프를 방지합니다.
dataToRead = -1;
}
}
}
잡기 (예외예외)
{
// 오류가 있으면 트랩합니다.
Response.Write("오류 : " + ex.Message);
}
마지막으로
{
if (iStream != null)
{
//파일을 닫습니다.
iStream.Close();
}
응답.끝();
}