2011-10-06 1 views
0

최근에 우리는 C# 4.0을 사용하여 개발 된 파일 다운로드 http 핸들러에 이상한 문제가 발생했습니다.Asp.net http 처리기 텍스트 파일 다운로드 문제. 잘 작동 codebehined에 대한

웹 응용 프로그램은 ASP.NET 4.0을 사용하여 개발되었으며 SSL을 통해 IIS 7.0에서 호스팅됩니다. 그것은 올바르게 작동했습니다. 하지만 최근 몇 가지 변경 사항으로 인해 config 또는 웹 사이트에서 아래 나열된 문제에 직면 해 있습니다.

텍스트 파일을 다운로드하면 정크 데이터가 방출됩니다. 핸들러 대신 aspx 페이지에서 코드를 사용하면 동일한 파일이 제대로 작동합니다. 둘 다 동일한 코드를 가지고 있습니다. 일부 파일은 정상적으로 작동합니다. 예를 들어 이미지 파일 또는 pdf 파일이 정상적으로 작동합니다. 그러나 텍스트 파일의 경우 동작이 매우 일치하지 않습니다. 빈 텍스트 파일이 제대로 작동합니다. 두 응답 (handler vs codebehind)을 비교해 보았습니다. 반환 된 content-length가 같지 않은 것 같습니다.

context.Response.Clear(); 
    context.Response.ClearHeaders(); 
    context.Response.ClearContent(); 
    context.Response.ContentType = !String.IsNullOrEmpty(mime) ?  mime : "application/octet-stream"; 
    context.Response.AppendHeader("Content-Disposition", String.Format("attachment; filename={0}", fileName)); 
    //context.Response.AppendHeader("Content-Length", buffer.Length.ToString()); 
    context.Response.OutputStream.Write(buffer, 0, buffer.Length); 
    context.Response.End(); 

CODE BEHIND

HTTP/1.1 200 OK 서버 : ASP.NET 개발 서버/10.0.0.0 날짜 : 목, 2011년 10월 6일 그리니치 표준시 02시 52분 26초의 X-ASPNET - 버전 : 4.0.30319 콘텐츠 - 처리 : 첨부 파일; 파일 이름 = 내 junk.txt 캐시 제어 : 개인 콘텐츠 유형 : 텍스트/일반 콘텐츠 길이 : 29 연결 :이 샘플 테스트 만

HttpHandler를위한

닫기

HTTP/1.1 200 OK 서버 : ASP.NET 개발 서버/10.0.0.0 날짜 : 2011 년 10 월 6 일 02:54:04 GMT X-AspNet- 버전 : 파일 이름 = 내 junk.txt 캐시 제어 : 개인 콘텐츠 형식 : 텍스트/일반 콘텐츠 길이 : 146 연결 : 닫기

I�%&/m�{J�J��t�� $ @ iG #) eVe] 흼 f f f f "" "" NL 6 나는

답변

0

시도 대신 AppendHeader()AddHeader()를 사용하고 context.Response.End() 문 앞에 Flush()를 호출합니다.

0

파일 이름에 쉼표가있는 경우 Chrome/Opera에서이 코드를 올바르게 처리하지 못하고 중복 응답 헤더가 있다고 생각할 수 있습니다.

context.Response.AddHeader("Content-disposition", string.Format("attachment; filename=\"{0}\""), fileName); 

here, here 및 자세한 내용은 here 참조하십시오.