Extjs.net Button点击下载jpg图片
<ext:Button ID="DownLoad" runat="server" Text="下载二维码" Width="120" Height="35" AutoPostBack="false"> <DirectEvents> <Click OnEvent="DownLoad_Click"> </Click> </DirectEvents> </ext:Button>
protected void DownLoad_Click(object sender, DirectEventArgs e) { WriteFile("/images/1.jpg"); }
public void WriteFile(string filePath) { try { string _pre_path = filePath; filePath = Server.MapPath(filePath); if (File.Exists(filePath)) { FileInfo info = new FileInfo(filePath); Response.Clear(); Response.ClearContent(); Response.ClearHeaders(); Response.AddHeader("Content-Disposition", "attachment;filename=" + System.IO.Path.GetFileName(filePath)); Response.AddHeader("Content-Length", info.Length.ToString()); Response.AddHeader("Content-Transfer-Encoding", "binary"); Response.ContentType = "application/octet-stream"; Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); Response.WriteFile(info.FullName); Response.Flush(); Response.End(); } } catch (System.Threading.ThreadAbortException ex0) { } catch (Exception ex1) { } finally { HttpContext.Current.Response.Close(); } }
如果使用以上代码会报200错误
解决方法:
1、在Button上加一个FileUploadField就能正常运行,很莫名其妙,1.2版本,4.6版本都有这个现象。
<ext:FileUploadField ID="fileUpload" runat="server" ButtonOnly="true" EmptyText="上传LOGO" ButtonText=""> </ext:FileUploadField>
<ext:Button ID="DownLoad" runat="server" Text="下载二维码" Width="120" Height="35"
AutoPostBack="false">
<DirectEvents>
<Click OnEvent="DownLoad_Click">
</Click>
</DirectEvents>
</ext:Button>
2、直接使用OnClick加上AutoPostBack=true可以,但是这种方式页面会刷新一下,另外手动刷新页面时有时会触发下载事件。如果使用Mask的话,必须加AutoPostBack=true,不然Mask不会消失。
3、最近同事发现的方法<DirectEvents>下加一个IsUpLoad="true"属性。
本博客是个人工作中记录,更深层次的问题可以提供有偿技术支持。
另外建了几个QQ技术群:
2、全栈技术群:616945527
2、硬件嵌入式开发: 75764412
3、Go语言交流群:9924600
闲置域名WWW.EXAI.CN (超级人工智能)出售。
另外建了几个QQ技术群:
2、全栈技术群:616945527
2、硬件嵌入式开发: 75764412
3、Go语言交流群:9924600
闲置域名WWW.EXAI.CN (超级人工智能)出售。