2012-04-17 1 views
2

이미지를 데이터베이스에 저장하고 있으며 파일 경로 + ID를 사용하여 이미지를 표시하기 위해 이미지 핸들러를 사용하고 있습니다. 문제는 페이지를 통해 이미지를 업데이트 할 때 이미지가 변경되지 않는다는 것입니다. Wierd는 firefox 또는 chrome에이 문제가 없습니다.ASHX 이미지 처리기가 작동하지 않습니다. 즉, firefox 및 chrome에서 작동합니다.

ASHX 처리기

public void ProcessRequest(HttpContext context) 
    { 
     Guid image_id; 
     if (context.Request.QueryString["id"] != null) 
      image_id = System.Guid.Parse(context.Request.QueryString["id"]); 
     else 
      throw new ArgumentException("No parameter specified"); 

     context.Response.ContentType = "image/jpeg"; 
     Stream strm = GetImageFromDatabase(image_id); 
     if (strm != null) 
     { 
      byte[] buffer = new byte[4096]; 
      int byteSeq = strm.Read(buffer, 0, 4096); 

      while (byteSeq > 0) 
      { 
       context.Response.OutputStream.Write(buffer, 0, byteSeq); 
       byteSeq = strm.Read(buffer, 0, 4096); 
      } 
      //context.Response.BinaryWrite(buffer); 
     } 
    } 

사용자 제어 코드

string imagePath = "<a href=" + (Image.ImageUrl = "~/ShowImage.ashx?id=" + r["Image_id"]); 

마크 업

<asp:UpdatePanel ID="Upd1" runat="server" UpdateMode="Always" > 
    <ContentTemplate> 
     <div id="mpe" style="width: 600px; padding: 5px;"> 
      <uc2:IMG ID="IMG1" cssclass="bodycopy" runat="server" /> 
     </div> 
     <asp:UpdateProgress ID="upp1" runat="server" AssociatedUpdatePanelID="Upd1"> 
      <ProgressTemplate> 
       <div id="progressBackgroundFilter"> 
       </div> 
       <div id="modalPopup"> 
        &nbsp; &nbsp; Loading... 
        <img align="middle" src="../images/Ajax/loading_1.gif" /> 
       </div> 
      </ProgressTemplate> 
     </asp:UpdateProgress> 
    </ContentTemplate> 
</asp:UpdatePanel> 

내가 여기에 게시 할 어떤 다른 코드 모르겠지만 내가 관련되어 있다고 생각하는 것입니다. 버튼을 클릭하여 이미지를 업데이트하면 데이터베이스의 행이 성공적으로 업데이트됩니다. 또한 이미지에 대한 데이터를 업데이트 할 수 있으며 올바르게 업데이트됩니다.

아이디어가 있으십니까?

+0

을 돌려 또 다른 예 또는 아니?? –

+0

이미지가 페이지로드시 즉, 이미지를 업데이트 할 때 이미지를 표시합니다. 이미지가 업데이트되면 이전 이미지가 표시되고 새 이미지는 표시되지 않습니다. –

+0

아마도 캐싱 때문일 수 있습니다. 이걸보세요 ** http : //superuser.com/questions/81182/how-to-force-internet-explorer-ie-to-really-the-page* * –

답변

0

결국 이미지 처리기에서 내 이미지 ID로 guid를 사용하고 있습니다. 하지만 내 SQL에서 이미지를 업데이트 할 때마다 newid() 함수가 내장 된 SQL Server를 사용할 때마다 이미지가 업데이트 될 때마다 guid가 변경됩니다. 이렇게함으로써 IE는 ID가 같지 않고 캐시 된 이미지를 사용하지 않음을 인식합니다.

0

이 코드를 사용해보실 수 있습니까?

string imagePath = "<a href='" + Page.ResolveClientUrl("~/ShowImage.ashx?id=" + r["Image_id"]) + "' />"; 
1

IE는 데이터를 캐시하고 URL이 변경되지 않으면 동일한 데이터를 표시합니다. 또한 다음과 같은 트릭을 같은 문제에 직면하고 제거 : -

imgUser.ImageUrl = "Handler.ashx?UserID=" + Convert.ToString(Session["userid"]) + "extraQS=" + DateTime.Now.Second; 

DateTime.Now.Second 가진 extraQS 쿼리 문자열이 URL 동적하여 트릭을 할 것입니다 따라서 URL이 각각 변경됩니다 브라우저 캐시에서 이미지가 사용되지 않습니다.

참고 : - Handler.ashx에서 추가 쿼리 문자열 인수를 무시하십시오.

0

QueryString 끝에 현재 초 또는 임의 번호를 추가하여 문제를 해결할 수 있습니다. 그것의 IE를 위해 잘 작동합니다.

string imagePath = "<a href=" + (Image.ImageUrl = "~/ShowImage.ashx?id=" + r["Image_id"] + "&timeInSec="+ DateTime.Now.Second); 

이미지가 있는지 당신이 ** ** 개발자 도구를 사용하여 ** ** IE에서 페이지를 확인하고 점검 할 수 이미지 URL

protected string getImageURL(int index) 
     { 
      return "ImageHandler.ashx?index=" + index + "&timeInSec=" + DateTime.Now.Second; 
     }