2010-01-21 3 views
8

I의 WriteFile을 사용하여이 파일을 dowloading 서버의 메가 바이트 PDF 나에게 전송 작업이 올바른 메가 바이트 파일 크기를 제공으로 15MB 다운로드, ...Response.TransmitFile 파일 크기 대 C# Response.WriteFile은 문제

인가를 제공해야 이것은 writeFile을위한 서버상의 메모리에 대한 어떤 종류의 압축 해제로 인한 것입니까? 누군가가 일어나고 같은 일을 봤다면 그냥

if (File.Exists(filepath)) 
{ 
    HttpContext.Current.Response.Clear(); 
    HttpContext.Current.Response.ContentType = "application/octet-stream"; 
    HttpContext.Current.Response.AddHeader("content-disposition","attachment;filename=\""+Path.GetFileName(filepath)+"\""); 
    HttpContext.Current.Response.AddHeader("content-length", new FileInfo(filepath).Length.ToString()); 

    //HttpContext.Current.Response.WriteFile(filepath); 
    HttpContext.Current.Response.TransmitFile(filepath); 

    HttpContext.Current.Response.Flush(); 
    HttpContext.Current.Response.Close(); 
} 
+0

난 그냥 같은 버그를 했어. IIS의 압축 설정은 영향을주지 않습니다. – geofftnz

답변

7

전송 작업 ... 인

코드를

(우리는 ?? IIS7 갔다하기 때문에 PS에만 나타났습니다) ... 궁금 - 쓰기 작업 지정된 파일을 메모리에 버퍼링하지 않고 HTTP 응답 출력 스트림에 직접 전달할 수 있습니다.

WriteFile - 지정된 파일을 HTTP 응답 출력 스트림에 직접 씁니다.

나는 전송 파일이 그것을 버퍼링하지 않기 때문에 차이가 발생한다고 말하고 싶습니다. 쓰기 파일은 버퍼링 (Afiak)을 사용하고 있습니다. 기본적으로 데이터를 전송하기 전에 일시적으로 데이터를 보유합니다. 정확한 파일 크기를 짐작할 수 없기 때문에 데이터를 청크로 작성하기 때문입니다.

2

다음 정의로 이해할 수 있습니다.

Response.TransmitFile VS Response.WriteFile :

  • 전송 작업 :이 방법은 서버의 응용 프로그램 메모리에로드하지 않고 파일을 클라이언트에 전송합니다. 다운로드되는 파일 크기가 클 경우에 사용하는 이상적인 방법입니다.

  • WriteFile :이 메서드는 다운로드 할 파일을 클라이언트에 보내기 전에 서버의 메모리로로드합니다. 파일 크기가 큰 경우, 당신은 ASPNET 작업자 프로세스가 다시 시작받을 수 있습니다 *

참조 : -. TransmitFile VS WriteFile