2014-08-29 2 views
0

fileid 매개 변수를 기반으로 이미지를 제공하는 C#에서 Ashx 처리기를 만들었습니다. 또한 필자가 작성한 간단한 툴팁 미리보기 스크립트가 있는데 작동하지 않습니다. 이미지로드를 볼 수는 있지만로드 된 후에 이미지는 사라집니다.ASP.NET 처리기가 제대로 작동하지 않습니다.

정적 이미지를 사용하면 문제가 없으므로 ASHX 처리기에 문제가 있다고 생각됩니다. 또한, 나는이 문제를 보여 a fiddle을 만든

public void ProcessRequest(HttpContext context) 
    { 
     string fileId = HttpUtility.UrlDecode(context.Request.QueryString["fileId"] ?? "") ?? ""; 
     string fullFileName = context.Server.MapPath("~/Uploads") + "\\" + fileId; 

     using (FileStream s = File.Open(fullFileName, FileMode.Open, FileAccess.Read, FileShare.Read)) 
     { 
      context.Response.ContentType = HelperClasses.Utility.GetMimeTypeFromMagic(fullFileName); 

      var buffer = new byte[s.Length]; 
      s.Read(buffer, 0, (int) s.Length); 

      context.Response.BinaryWrite(buffer); 
      context.Response.Write(buffer); 

      s.Close(); 
     } 
     context.Response.Flush(); 
     context.Response.Close(); 
    } 

: 여기 내 ASHX 처리기 코드입니다.

+0

안녕하세요, 크롬으로이 문제가 있다고 생각합니다. http://stackoverflow.com/questions/22219565/iis-chrome-failed-to-load-resource-neterr-incomplete-chunked-encoding –

+0

핸들러가 정상입니다. URL을 브라우저에 꽂으면 이미지가 나타납니다. –

+0

'GetMimeTypeFromMagic' (멋진 메소드 이름 btw)이 올바른 컨텐츠 유형을 반환합니까? – PoweredByOrange

답변

0

BinaryWrite 외에도 Response.Write을 호출했기 때문에 응답 끝에 쓰레기를 던지고 있습니다. 당신이 당신의 핸들러의 응답을 보면,이 (문자 그대로) 끝에 :

System.Byte [] 분명히 그

enter image description here

이미지의 일부가 아닙니다 . 이 라인은 제거되어야한다 : 나는 또한 avoid Response.EndResponse.Close 같은 아무것도 할

context.Response.Write(buffer); 

. ASP.NET 런타임에서 처리하도록하십시오.

더 나은

아직, 당신은 .NET Framework 4 또는 그 이상,이에 대한 모든 것을 단순화 할 수 있습니다 사용하는 경우 : 당신의 코드에서

s.CopyTo(context.Response.OutputStream); 
관련 문제