문제

파일 다운로드에 대한 코드를 따르십시오.

        FileInfo fileInfo = new FileInfo(filePath);

        context.Response.Clear();
        context.Response.ContentType = "application/octet-stream";
        context.Response.AddHeader("Content-Disposition", "attachment; filename=" + System.IO.Path.GetFileName(filePath));
        context.Response.AddHeader("Content-Length", fileInfo.Length.ToString());
        context.Response.WriteFile(filePath);
        context.Response.End();

내 지역 IIS6에서 실행하면 잘 작동합니다. 웹 브라우저 (IE8, Firefox 3.5.2, Opera 10에서 테스트) 파일 다운로드를 시작하기 전에 파일 길이를 보여줍니다.

원격 IIS7 에서이 코드를 실행하면 웹 브라우저에는 파일 길이가 표시되지 않습니다. 파일 길이는 알려져 있지 않습니다.

이 코드가 IIS7에서 실행될 때 파일 길이를 얻지 못하는 이유는 무엇입니까?

도움이 되었습니까?

해결책

사용 바이올리니스트 실제로 전송 된 내용을 확인합니다. 내 생각에 IIS7 서버에서 버퍼링이 False로 설정된 결과로 청크 인코딩을 받고 있다고 생각합니다.

BTW, 응답을 떨어 뜨립니다. 엔드는 할 수있는 외상성을 부여하고 불필요합니다 (그 문제에 대해서는 청소하라는 요청이 필요합니다).

편집하다

엄밀히 말하면 청크 인코딩으로 컨텐츠를 스트리밍 할 때 (시나리오에서 바람직한) 콘텐츠 길이 헤더가 존재하지 않아야합니다 (참조 RFC2616 섹션 4.4.) IIS7이 이것을 시행하기 위해 스스로 받아 들인 것 같습니다. 실제로 COM 코드가 버퍼링이 꺼져있을 때 COM 코드가 컨텐츠 길이 헤더를 추가하려고 할 때 IIS7이 오류를 던지는 클래식 -ASP 시나리오가있었습니다.

아이보리 타워의위원회가 원하는 것에도 불구 하고이 헤더는 최종 사용자에게 매우 유용한 정보를 제공하기 때문에 이것은 정말 성가신 일입니다.

다른 팁

이 게시물에 감사드립니다 .... 첫 줄로 IE를 위해 작동했습니다.

public void WriteCSV(string strData) {
   //Required for IIs7 WS2008R2 fix
   Response.ClearHeaders();
   Response.Clear();


   Response.Buffer = true; 
   Response.ContentType = "application/csv";
   Response.AddHeader("Content-Disposition", "attachment;filename=report.csv");
   Response.Write(strData);
   Response.Flush();
   Response.End();
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top