【问题标题】:ASP.Net: asynchronous image upload displayed using handlerASP.Net:使用处理程序显示的异步图像上传
【发布时间】:2011-10-17 19:15:53
【问题描述】:

我有一个非常具体的问题,我想我不会有答案,但是......让我们试试吧! 我有一个 aspx 网页,它可以与 Firefox 和 Chrome 完美配合,但不能在 IE9 上运行(不要喂巨魔^^)。

我的目标是允许使用 ASP AjaxControlToolkit 进行异步图像上传(有关演示,请参阅 http://www.asp.net/ajaxlibrary/AjaxControlToolkitSampleSite/asyncfileupload/asyncfileupload.aspx)。图片异步上传完成后,调用 UploadedComplete 函数并将图片放入会话变量中:

if (fileSizeOk && fileTypeOk)
        Session["image"] = this.AsyncFileUploadLogo.FileBytes;

并行地,我有一个处理程序负责从会话变量返回图像:

byte[] buffer = (byte[])context.Session["image"];
context.Response.OutputStream.Write(buffer, 0, buffer.Length);
context.Response.OutputStream.Flush();

然后,在我的 aspx 页面中,我在 UpdatePanel 中有一个 asp:Image 字段,它要求处理程序每​​五秒获取一次图像:

<asp:UpdatePanel ID="UpdatePanelLogo" runat="server">
    <ContentTemplate>  
        <asp:Image ID="ImageFileUploaded" runat="server" ImageUrl="AsyncImageHandler.ashx" />
        <asp:Timer ID="TimerFileUploaded" Interval="5000" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>

当用户验证表单时,我只需要从会话中获取变量,然后将图像与其他值一起保存在数据库中。

这是我的问题:对于 Firefox 和 Chrome,计时器会引发重新加载图像,但对于 IE(甚至 IE9),图像仅在按下 F5 后才会显示。当我在处理程序中放置断点时,我可以看到它从未被 IE 调用(可能是缓存机制?)。

你知道如何解决这个问题吗?

感谢您的回答!

【问题讨论】:

标签: asp.net asynchronous ajaxcontroltoolkit handler


【解决方案1】:

使用经典的网络脏把戏找到了解决方案:

this.ImageFileUploaded.ImageUrl = "AsyncImageHandler.ashx?p=" + Environment.TickCount.ToString();

我在 PageLoad() 中添加了该行,在计时器触发的每个回发时都会调用最后一行 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-02
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    相关资源
    最近更新 更多