2013-03-12 3 views
2

제한된 파일에 대한 액세스 권한을 사용자에게 부여해야합니다. 이 작업을 위해 일반적인 웹 핸들러를 사용하고 있습니다.대용량 파일에도 메모리가 부족한 파일 다운로드

파일 크기가 1.5GB 이상일 수 있습니다.

가능한 한 적은 RAM/메모리 사용량으로이 파일을 제공해야합니다. 우리는 솔루션이보고있는 순간

:

request.ContentType = "text/plain"; 
request.ContentLength = byteArray.Length; 
Stream dataStream = request.GetRequestStream(); 
int buffersize = 65536; 
byte[] buffer = new byte[buffersize]; 
using (StreamReader reader = new StreamReader(filename)) 
{ 
    int count = 0; 
    while (true) 
    { 
     int count = reader.Read(buffer, 0, buffersize); 
     dataStream.Write(buffer, 0, count); 
     if (count < buffersize) break; 
    } 
} 

겠습니까 우리를 위해이 일?

더 좋은 해결책이 있습니까?

주의해야 할 사항은 무엇입니까?

IIS를 통해 파일을 직접 공유하는 것은 옵션이 아닙니다. 핸들러는 액세스 할 수있는 사용자와 액세스 할 수없는 사용자를 제어해야합니다.

+2

StreamReader를 사용하지 마십시오. 그것은 텍스트 파일만을위한 것이며 여기서는 필요하지 않거나 원하지 않습니다. –

답변

4

HttpResponse.TransmitFile 메서드를 사용해야합니다. 메모리에 파일을 버퍼링하지 않지만 필요한 모든 컨트롤을 얻을 수 있습니다.

+0

기본적으로 다음과 같이 간단합니다. Response.ContentType = "application/pdf"; Response.TransmitFile (@ "test.pdf"); Response.End(); ? – mfriis

+1

'Response.End'를 건너 뛰고 핸들러가 정상적으로 종료되도록해야합니다. –

관련 문제