我将图像存储在数据库中,我使用图像处理程序使用文件路径+ id显示图像。我遇到的问题是当我通过页面更新图像时,图像不会改变。奇怪的是我没有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">
Loading...
<img align="middle" src="../images/Ajax/loading_1.gif" />
</div>
</ProgressTemplate>
</asp:UpdateProgress>
</ContentTemplate>
</asp:UpdatePanel>
我不确定要发布的其他代码,但我认为这是相关的。当我单击我的按钮来更新图像时,它成功更新了数据库中的行。此外,我可以更新有关图像的数据,并正确更新。
有什么想法吗?
答案 0 :(得分:1)
如果URL没有更改,IE会缓存数据并显示相同内容。我也遇到了同样的问题,并通过以下技巧将其删除: -
imgUser.ImageUrl = "Handler.ashx?UserID=" + Convert.ToString(Session["userid"]) + "extraQS=" + DateTime.Now.Second;
带有DateTime.Now.Second的extraQS查询字符串将通过使URL动态化来实现技巧,因此URL将在每个请求上更改,并且不会从浏览器缓存中使用该图像。
注意: - 忽略Handler.ashx中的额外查询字符串参数。
答案 1 :(得分:0)
您可以尝试使用此代码吗?
string imagePath = "<a href='" + Page.ResolveClientUrl("~/ShowImage.ashx?id=" + r["Image_id"]) + "' />";
答案 2 :(得分:0)
我最终做的是在我的Image处理程序中使用guid作为我的图像ID。但是在我的SQL中,当我更新图像时,我使用sql server内置的newid()函数,因此每次更新时图像guid都会改变。通过这样做,IE识别出它不是相同的ID并且不使用缓存的图像。
答案 3 :(得分:0)
可以通过在QueryString末尾添加当前秒或随机数来解决此问题。它适用于IE。
www.example.com/xxx
返回图片网址的另一个示例
string imagePath = "<a href=" + (Image.ImageUrl = "~/ShowImage.ashx?id=" + r["Image_id"] + "&timeInSec="+ DateTime.Now.Second);