2015-06-21 53 views
0

我正在尝试使用ashx从数据库加载图像。使用ashx阅读图像在asp.net中不起作用

当我使用此代码的图像加载成功

<% <asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("Id", "~/Handler/CategoryHandler.ashx?catId={0}") %>' /> 

但是,当我使用此代码

<% 
      foreach (ProductCategories VARIABLE in categoriesList) 
      { 
       Response.Write("<div class='wrapper-box'>" + 
            "<a href='product/product.aspx'>" + 
             "<img src='~/Handler/ProductHandler.ashx?Id="+VARIABLE.Id+"'/>" + 
             "<p>"+VARIABLE.CategoryName+"</p>" + 
            "</a>" + 
           "</div>"); 
      } 

      %> 

图像不会加载。为什么代码不能正常工作?

的ashx的文件是这样的:

public void ProcessRequest(HttpContext context) 
    { 
     // Set up the response settings 
     context.Response.ContentType = "image/jpeg"; 
     context.Response.Cache.SetCacheability(HttpCacheability.Public); 
     context.Response.BufferOutput = false; 
     // Setup the Size Parameter 
     ImageSize size; 
     switch (context.Request.QueryString["Size"]) 
     { 
      case "S": 
       size = ImageSize.Small; 
       break; 
      case "L": 
       size = ImageSize.Large; 
       break; 
      default: 
       size = ImageSize.Small; 
       break; 
     } 
     // Setup the PhotoID Parameter 
     Stream stream; 
     if (context.Request.QueryString["Id"] != null && context.Request.QueryString["Id"] != "") 
     { 
      Int32 id = Convert.ToInt32(context.Request.QueryString["Id"]); 
      stream = Products.GetImageStream(id, size); 
      //context.Response.AddHeader("content-disposition", String.Format("attachement;filename=\"{0}\"",); 
      // Get the photo from the database, if nothing is returned, get the default "placeholder" photo 
      if (stream == null) return; 
      // Write image stream to the response stream 
      const int buffersize = 1024 * 16; 
      byte[] buffer = new byte[buffersize]; 
      int count = stream.Read(buffer, 0, buffersize); 
      while (count > 0) 
      { 
       context.Response.OutputStream.Write(buffer, 0, count); 
       count = stream.Read(buffer, 0, buffersize); 
      } 
     } 
    } 

回答

1

的问题是,Response.Write不扩大~字符到基本URL,从而在页面的HTML生成的图像的URL是与此类似:

<img src='~/Handler/ProductHandler.ashx?Id=123' /> 

为了解决这个问题,你有你的Response.Write使用前扩大网址:

<% 
    foreach (ProductCategories VARIABLE in categoriesList) 
    { 
     var imgUrl = ResolveUrl("~/Handler/ProductHandler.ashx?Id=" + VARIABLE.Id.ToString()); 
     Response.Write("<div class='wrapper-box'>" + 
      "<a href='product/product.aspx'>" + 
       "<img src='" + imgUrl + "'/>" + 
       "<p>"+VARIABLE.CategoryName+"</p>" + 
      "</a>" + 
     "</div>"); 
} 
%> 
+0

它不工作亲爱的朋友。 –

+0

图像保存在数据库中图像字段 –

+0

图像无法加载! –