a标签ajax直接调用后台方法下载文件:

原创 2017年06月23日 10:25:29

个人原创小说网站:友书–绿色纯净无广告,欢迎大家前来指点

a标签ajax直接调用后台方法下载文件:
—-前台:

<p id="TrueData" style="margin-top: 10px;"><a href="../program/ashx/DownTemplate.ashx">下载空白模板</a>,并按模板填写文件后上传</p>

—-后台:

             public void ProcessRequest(HttpContext context)
             {
                context.Response.ContentType = "text/json";
                context.Response.Buffer = true;
                context.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1);
                context.Response.AddHeader("pragma", "no-cache");
                context.Response.AddHeader("cache-control", "");
                context.Response.CacheControl = "no-cache";
                string url = "上传模版.xls";
                FileHelper.DownloadFile(url);
            }

         public static void DownloadFile(string FileUrl)
         {
            string filePath = path + FileUrl;//路径
            System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);
            if (fileInfo.Exists == true)
              {
                const long ChunkSize = 102400;//100K 每次读取文件,只读取100k,这样可以缓解服务器的压力
                byte[] buffer = new byte[ChunkSize];
                System.Web.HttpContext.Current.Response.Clear();
                System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);
                long dataLengthToRead = iStream.Length;//获取下载的文件总大小
                System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
                System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileInfo.Name);
                while (dataLengthToRead > 0 && System.Web.HttpContext.Current.Response.IsClientConnected)
                {
                    int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小
                    System.Web.HttpContext.Current.Response.OutputStream.Write(buffer, 0, lengthRead);
                    System.Web.HttpContext.Current.Response.Flush();
                    dataLengthToRead = dataLengthToRead - lengthRead;
                }
                //System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest();
                System.Web.HttpContext.Current.Response.End();
                System.Web.HttpContext.Current.Response.Close();

            }
        }

ps:其实还有种更简单的办法,直接用h5, a标签上在加一个属性就完美解决下载问题,不用写后台繁琐的文件流代码,具体实列如下:

<a href="/Upload/20170608/201706081350129077.xls" download="test.xls">文件下载</a>

download里面填写的是你要下载文件的文件名,举例:如果你要下的文件名为:test.xls,而你在服务器上存的真实文件名为:123456.xls,如果download中填写test,那么下载下来的文件名就叫test.xls而不是123456.xls,download中不管你填不填写,文件都会被下载下来,区别只是下载下来的文件的文件名不同而已

w3school在线测试地址:
http://www.w3school.com.cn/tiy/t.asp?f=html_a_download
有疑问或不懂的同学可以去这里用一下就明白了
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

ajax 获取文件流 的另类解决办法

尝试了下$.ajax或者$.post等方式去后台获取文件

前台ajax请求后台实现下载

下面是大致代码。 jsp页面: function getDada(){        var returnFilePath = "";         ....          ... ...

ajax请求不能下载文件

最近在做文件下载,后台写了个控制层,直接走进去应该就可以下载文件,各种文件图片,excel等 但是起初老是下载失败,并且弹出下面的乱码: 前台请求代码: $('#fileexcel')....

js 下载文件 前端 后台 处理

前端js 下载 .txt   .png  ... 等: window.location.href = TXTUrl;  /********************************...
  • zhsaymj
  • zhsaymj
  • 2016年08月22日 12:21
  • 1858

前台使用ajax与后台进行文件传输

前台使用ajax与后台进行文件传输在网上想搜如何用jQuery与控制表单与后台进行文件传输 大部分的回答都是直接用form表单提交 然而我想要的是使用ajax技术将文件传到后台,经过后台的处理后再...

a标签onClick使用ajax异步刷新时页面整个刷新问题

问题: 如下图: 部分代码为 html 上一页 下一页 其中两个函数previousPage和nextPage里面用了ajax异步刷新 但是...

<a>标签点击实现下载文件功能

【标签将参数转编码后用POST请求发送给后台】 遇到问题:1.标签通过url的形式给后台传参数是出现乱码的情况,前台页面显示的是正常的,到了action哪里得到的就是乱码   2.通过前端enco...

asp.net用ajax交互实现文档导出及下载

做导出一直遇到个问题就是不能用ajax实现一步导出文档,即导出加下载。今天突然想到可以分开来做就上网搜了下,发现一篇比较不错的文章(http://www.cnblogs.com/zj0208/p/59...

select下拉框之数据回显

估计这是最简单的一种方法了 setTimeout("$('select#menuLevel').val('${menuLevel}')", 100);...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:a标签ajax直接调用后台方法下载文件:
举报原因:
原因补充:

(最多只允许输入30个字)