IIS7 파일 길이 다운로드
-
06-07-2019 - |
문제
파일 다운로드에 대한 코드를 따르십시오.
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(); }