본문 바로가기

ASP.NET

Response.TransmitFile을 이용한 다운로드

ASP.NET 2.0에서 파일 다운로드를 구현할때 Respone.WriteFile을 이용해서 다운로드를 구현하였었는데, MSDN에는

큰 파일에 이 메서드를 사용하면 메서드 호출 시 예외가 발생할 수 있습니다. 이 메서드에 사용할 수 있는 파일의 크기는 웹 서버의 하드웨어 구성에 따라 다릅니다. 자세한 내용은 Microsoft 기술 자료에서 812406, "PRB: Response.WriteFile Cannot Download a Large File"을 참조하십시오.

라고 되어있습니다.

즉, 서버의 하드웨어에 따라 다운로드에 대한 한계가 존재한다는 것이겠죠?

 

하지만, HttpResponse 클래스에는 WirtFile메서드외에 TransmitFile메서드도 존재하는데, MSDN설명을 보면

지정된 파일을 메모리에 버퍼링하지 않고 HTTP 응답 출력 스트림에 직접 씁니다.

라고 되어 있습니다.( .NET 2.0에서 추가되었습니다.)

 

즉, 하드웨어의 구성에 관계없이 다운로드가 가능한 것이겠죠?

 

아직 정확한 성능의 차이점은 테스트를 하지않아 알지 못하지만, WriteFile에 대한 문제점을 해결하고자 MS에서 .NET Framework 2.0에서 추가한듯 합니다.(아니면 말구^^)

 

아래는 이미지등의 Internet Explorer자체에서 표시하는 파일형식도 모두 다운로드 대화상자를 이용하여 다운로드하는 코드입니다.

 

    1 Response.ContentType = "image/jpeg";

    2 Response.AppendHeader("Content-Disposition", "attachment; filename=NikeShox.jpg");

    3 Response.TransmitFile(@"D:\My Documents\My Pictures\기타 ScreenShots\042007000046.jpg");

    4 Response.End();

 

HTTP Header에 Content-Dispoition항목에다 attachment라는 값을 할당하였습니다.
Content-Disposition속성에다 attachment속성을 할당하면 브라우저에서 모든 확장자파일에 대하여 다운로드시 다운로드 대화상자를 뜨도록 하는 것이 가능합니다.