AjaxFileUpload仅上传图片完成后触发页面重载问题咨询
问题根因定位(本地环境独有)
你遇到的问题是本地IIS环境特有的响应拦截问题,核心触发逻辑如下:
- 仅图片后缀文件写入磁盘时,本地IIS加载的第三方图片处理模块/内置静态文件规则会拦截当前上传请求的响应,修改控件预期的标准返回格式
- AJAXControlToolkit 版本的
AjaxFileUpload控件存在历史设计缺陷:当上传响应解析失败时,会触发默认页面重载逻辑,非图片文件不会触发IIS的图片类拦截规则,因此运行正常 SaveAs调用触发了文件写入动作,是拦截规则的触发前置条件,因此移除该行后不会触发异常
解决方案
快速验证方案
你可以先修改文件存储逻辑,绕开IIS对图片后缀的即时拦截,验证问题是否消失:
If Not System.IO.Directory.Exists(tempFilePath) Then System.IO.Directory.CreateDirectory(tempFilePath) End If ' 先存为临时后缀,绕开图片拦截规则 Dim tempSavePath = tempFilePath & e.FileName & ".uploadtmp" sender.SaveAs(tempSavePath) ' 重命名为原文件名 System.IO.File.Move(tempSavePath, tempFilePath & e.FileName) Session("docUploaderFiles") = If(Session("docUploaderFiles"), New List(Of String)) CType(Session("docUploaderFiles"), List(Of String)).Add(e.FileName)
如果修改后不再重载页面,即可确认是本地IIS的图片类拦截规则导致的问题。
本地环境修复方案
按以下顺序排查本地IIS配置:
- 打开IIS管理器,进入对应站点的「模块」配置,禁用所有非系统自带的图片处理类模块(常见如ImageResizer、各种缩略图生成插件、本地调试用的图片预览模块)
- 检查站点的「处理程序映射」,确认没有针对
.png/.jpeg/.gif后缀的特殊动态处理规则 - 关闭本地IIS的「静态文件压缩」临时测试,部分版本的IIS压缩逻辑会在图片文件写入后修改响应头,导致前端控件解析失败
永久兼容方案
如果不想修改本地环境,可以在控件的OnClientUploadError事件中添加阻止默认行为的逻辑,避免控件触发重载:
<ajax:AjaxFileUpload AutoStartUpload="true" OnClientUploadCompleteAll="() => $('#btnSaveThumbnails').toggle()" OnClientUploadError="(sender, args) => args.set_cancel(true)" ClientIDMode="Static" style="max-width:800px;display:none" runat="server" ID="thumbUploader" />
内容的提问来源于stack exchange,提问作者Willy Russell
相关产品推荐
相关产品推荐

