2011-12-24 5 views
0

httphandler를 통해 이진 이미지를 표시하려고합니다.HttpHandler를 통해 이진 이미지를 표시하려고합니다.

아약스 호출

public void ProcessRequest(HttpContext context) 
{ 
    context.Response.ContentType = "image/JPEG"; 
    try 
    { 
     krystaladbDataContext db = new krystaladbDataContext(); 

     var binimg = (from i in db.image_tables 
         where i.IMG_ID.Equals(1380) 
         select i.IMG_THUMB).Single(); 


     byte[] b = binimg.ToArray(); 
     MemoryStream ms = new MemoryStream(b); 
     Image img = Image.FromStream(ms); 
     img.Save(context.Response.OutputStream, 
      System.Drawing.Imaging.ImageFormat.Jpeg); 
    } 
    catch (Exception ex) 
    { 
     context.Response.Write(ex); 
    } 
} 

뭔가 아직 여기하고 바이너리 데이터를 덤프되어 있지 보인다

$.ajax({ 
    type: "GET", 
    url: "AnswerPostHandler.ashx", 
    data: "imgid=1380", 
    success: function (msg) { 
      $(parent).append(msg); 
    }, 
    error: function (msg){ 
      alert(msg); 
    } 
}); 

처리기 코드 : 여기 내가 가지고있는 코드입니다. Base64 인코딩도 선택 사항이지만 테스트를 거쳤으며 Internet Explorer 7에서 작동하지 않습니다 (문자 그대로 이미지 부분을 잘라냅니다).

내가 여기서 잘못하고있는 부분에 대해 조언하고 올바른 방법을 제안 할 수 있습니까? 감사

+0

이미지를 구축 할 필요가 없습니다. 그냥 바이트 배열을 작성 - context.Response.BinaryWrite (b); – adatapost

+0

나는 그것을하려고했지만 이미지가 표시되지 않습니다 ... –

+0

ajax 출력 (바이너리)을 DOM 요소에 쓸 수 없습니다. base64 DataURI (이 경우에는 핸들러 코드를 수정해야 함)를 사용할 수도 있지만 브라우저에는 많은 문제가 있습니다. 가장 좋은 옵션은 use - image 태그입니다. adatapost

답변

3

처리기 코드,

public void ProcessRequest(HttpContext context) 
{ 
    context.Response.ContentType = "image/JPEG"; 
    try 
    { 
     krystaladbDataContext db = new krystaladbDataContext(); 
     var binimg = (from i in db.image_tables 
         where i.IMG_ID.Equals(1380) 
         select i.IMG_THUMB).Single(); 


     byte[] b = binimg.ToArray(); 
     context.Response.BinaryWrite(b); 
     context.Response.Flush(); 
    } 
    catch (Exception ex) 
    { 
     context.Response.Write(ex); 
    } 
} 

및 HTML <img> 마크 업,

<img src="AnswerPostHandler.ashx?imgid=1380" alt="None" id="img1" /> 

또는 당신은 jQuery 코드를 통해 요청할 수있다 :

$("#showImageButton").click(function() { 
       $("#img1").attr("src", "AnswerPostHandler.ashx?imgid=1380"); 
      }); 
+0

감사 합니다이 @AVD. 나는 이것을 찾기 위해 시간을 보냅니다. –

+0

모든 방법이 방법으로 파일을 직접 다운로드하는 방법은 무엇입니까? – Pierre

-1

이 $ (부모) .html 중에서 ('')

이진 스트림 같은 것을 할 쉬울 것은 IMG 소스로 브라우저에서 구현하기 어려울 것입니다.

+0

고마워,하지만 그게 도움이되지 않습니다 :/ –

관련 문제