h5+C#实现前端下载文件

前端

function download_1(url) {

    var arr = url.split('/');

    var url = '/FileManagement/Accessory/DownloadFile?url=' + url;

    var xhr = new XMLHttpRequest();

    xhr.open('POST', url, true);        // 也可以使用POST方式,根据接口

    xhr.responseType = "blob";    // 返回类型blob

    xhr.onload = function () {

        if (this.status === 200) {

            var blob = this.response;

            var reader = new FileReader();

            reader.readAsDataURL(blob);    // 转换为base64,可以直接放入a表情href

            reader.onload = function (e) {

                var a = document.createElement('a');

                a.download = arr[arr.length - 1];//下载文件名

                a.href = e.target.result;

                $("body").append(a);    // 修复firefox中无法触发click

                a.click();

                $(a).remove();

            }

        }

    };

    // 发送ajax请求

    xhr.send()

}

后端

    [HttpPost]

        public void DownloadFile(string url)

        {

            string PassUrl = url;

            string[] arr = PassUrl.Split('/');

            string fileName = arr[arr.Length - 1];

            string filePath = Server.MapPath("~/" + PassUrl);//路径

            FileInfo fileinfo = new FileInfo(filePath);

            Response.Clear();         //清除缓冲区流中的所有内容输出

            Response.ClearContent();  //清除缓冲区流中的所有内容输出

            Response.ClearHeaders();  //清除缓冲区流中的所有头

            Response.Buffer = true;   //该值指示是否缓冲输出,并在完成处理整个响应之后将其发送

            Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);

            Response.AddHeader("Content-Length", fileinfo.Length.ToString());

            Response.AddHeader("Content-Transfer-Encoding", "binary");

            Response.ContentType = "application/unknow";  //获取或设置输出流的 HTTP MIME 类型

            Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); //获取或设置输出流的 HTTP 字符集

            Response.TransmitFile(filePath);

            Response.End();

        }

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值