ASP.Net 에서 큰 파일 을 다운로드 하 는 실현 방법

본 고 는 ASP.Net 에서 큰 파일 을 다운로드 하 는 실현 방법 을 실례 로 서술 하 였 다.모두 에 게 참고 하도록 공유 하 다.구체 적 인 분석 은 다음 과 같다.
Google 사이트 가 큰 파일 다운 로드 를 지원 해 야 할 때 제어 하지 않 으 면 사용자 가 다운로드 페이지 를 방문 할 때 응답 하지 않 아 브 라 우 저 를 붕괴 시 킬 수 있 습 니 다.다음 코드 를 참고 하여 이 문 제 를 피 할 수 있 습 니 다.
이 코드 에 대한 몇 가지 설명:
1.데 이 터 를 작은 부분 으로 나 눈 다음 에 출력 흐름 으로 이동 하여 다운로드 할 수 있 도록 합 니 다.
2.다운로드 한 파일 형식 에 따라 Response.ContentType 을 지정 합 니 다.(OSChina 의 이 주 소 를 참고 하면 대부분의 파일 형식의 대조 표를 찾 을 수 있 습 니 다.http://tool.oschina.net/commons)
3.response 를 쓸 때마다 Response.Flush()를 호출 하 십시오.
4.반복 적 으로 다운로드 하 는 과정 에서 Response.IsClient Connected 를 사용 하면 프로그램 이 가능 한 한 빨리 연결 이 정상 인지 확인 할 수 있 습 니 다.정상 이 아니라면 서버 자원 을 사용 하기 위해 다운 로드 를 일찍 포기 할 수 있 습 니 다.
5.다운로드 가 끝 난 후에 Response.End()를 호출 하여 현재 스 레 드 가 마지막 에 종 료 될 수 있 도록 해 야 합 니 다.

using System;

namespace WebApplication1
{
    public partial class DownloadFile : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            System.IO.Stream iStream = null;

            // Buffer to read 10K bytes in chunk:
            byte[] buffer = new Byte[10000];

            // Length of the file:
            int length;

            // Total bytes to read.
            long dataToRead;

            // Identify the file to download including its path.
            string filepath = Server.MapPath("/") +"./Files/TextFile1.txt";

            // Identify the file name.
            string filename = System.IO.Path.GetFileName(filepath);

            try
            {
                // Open the file.
                iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open,
                            System.IO.FileAccess.Read, System.IO.FileShare.Read);

                // Total bytes to read.
                dataToRead = iStream.Length;

                Response.Clear();
                Response.ClearHeaders();
                Response.ClearContent();
                Response.ContentType = "text/plain"; // Set the file type
                Response.AddHeader("Content-Length", dataToRead.ToString());
                Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);

                // Read the bytes.
                while (dataToRead > 0)
                {
                    // Verify that the client is connected.
                    if (Response.IsClientConnected)
                    {
                        // Read the data in buffer.
                        length = iStream.Read(buffer, 0, 10000);

                        // Write the data to the current output stream.
                        Response.OutputStream.Write(buffer, 0, length);

                        // Flush the data to the HTML output.
                        Response.Flush();

                        buffer = new Byte[10000];
                        dataToRead = dataToRead - length;
                    }
                    else
                    {
                        // Prevent infinite loop if user disconnects
                        dataToRead = -1;
                    }
                }
            }
            catch (Exception ex)
            {
                // Trap the error, if any.
                Response.Write("Error : " + ex.Message);
            }
            finally
            {
                if (iStream != null)
                {
                    //Close the file.
                    iStream.Close();
                }

                Response.End();
            }
        }
    }
}

본 고 에서 말 한 것 이 여러분 의 asp.net 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기