asp.net mvc实现文件下载「建议收藏」

asp.net mvc实现文件下载「建议收藏」前段时间一直对如何解决文件下载的问题比较困惑,对文件下载的问题一直都是用的前端的方式解决的,代码如下//下载functiondownload(filePath){window.open(filePath);}但是这个方法有他的缺陷:1.下载的文件后缀必须为iis程序池中存在的文件2.此方法是通过浏览器打开服务器文件,无法直接下载近期看了asp.net下载文件几种方式…

大家好,又见面了,我是你们的朋友全栈君。

前段时间一直对如何解决文件下载的问题比较困惑,对文件下载的问题一直都是用的前端的方式解决的,代码如下

//下载
function download(filePath) {
    window.open(filePath);
}

但是这个方法有他的缺陷:
1.下载的文件后缀必须为iis程序池中存在的文件
2.此方法是通过浏览器打开服务器文件,无法直接下载
近期看了asp.net 下载文件几种方式这篇文章并且结合了一些其他的文章之后,找到了更好的解决办法,我用的是 以字符流的形式下载文件
Controller源码:

[HttpGet]
public ActionResult Download(string filePath) {
    filePath = Server.MapPath(System.Configuration.ConfigurationManager.AppSettings["AttachmentPath"] + filePath);
    string fileName = Path.GetFileName(filePath);

    FileStream fs = new FileStream(filePath, FileMode.Open);
    byte[] bytes = new byte[(int)fs.Length];   //以字符流的形式下载文件
    fs.Read(bytes, 0, bytes.Length);
    fs.Close();
    Response.Charset = "UTF-8";
    Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
    Response.ContentType = "application/octet-stream";  //通知浏览器下载文件而不是打开

    Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(fileName));
    Response.BinaryWrite(bytes);
    Response.Flush();
    Response.End();
    return new EmptyResult();
}

View源码:

//下载
function download(getur) {
            //getur = "/控制器/方法名?filePath=" + 文件相对路径;
            var str = document.createElement("a");//创建a标签
            str.href = getur;
            document.body.appendChild(str);
            str.click();
            str.style.display = "none";//隐藏标签
            //ps:本想删除a标签,但是没找到好用的方法,只能暂时先隐藏掉
}

效果图:
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162897.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 开发一个属于自己的app

    开发一个属于自己的app

    2021年9月18日
  • c语言网络通信_c语言tcp网络编程

    c语言网络通信_c语言tcp网络编程目录TCP/IP协议介绍TCP/IP协议与WinSock网络编程接口的关系WinSock编程简单流程VC中socket编程·服务器实现·客户端实现测试结果TCP/IP协议介绍TCP/I…

    2022年10月21日
  • 背景图片的精灵图的使用

    背景图片的精灵图的使用<!DOCTYPEhtml><html><head><metacharset="utf-8"/><metahttp-equiv="X-UA-Compatible"content="IE=edge"><title>背景图片的精灵图的使用<

    2022年6月9日
  • idea怎么取消多行注释_idea注释快捷键哪里修改

    idea怎么取消多行注释_idea注释快捷键哪里修改1、一次性添加多行注释的快捷键首先选中要注释区域,然后ctrl+/    这个是多行代码分行注释,每行一个注释符号ctrl+shift+/  这个是多行代码注释在一个块里,只在开头和结尾有注释符号2、取消多行注释快捷键怎样添加快捷键的,用相同方法取消,如ctrl+/ 添加注释,则ctrl+/取消注释ctrl+shift+/添加注释,则ctr

    2022年8月15日
  • 游标和动态SQL

    游标和动态SQL游标类别:静态游标(指在编译的时候,游标就与一个select语句进行了静态绑定的游标,这种游标只能作用于一个查询语句)和动态游标(就是希望我们的查询语句在运行的时候才跟游标绑定,为了使用动态游标,必须声明游标变量)。动态游标分两种,分别是强类型和弱类型。强类型的动态游标只能支持查询结果与他类型匹配的这种查询语句,弱类型的动态游标可以支持任何的查询语句。静态游标分为两种,隐式游标和显

    2022年6月23日
  • Hadoop mapreduce过程key 和value分别存什么值

    Hadoop mapreduce过程key 和value分别存什么值Hadoop mapreduce过程key 和value分别存什么值

    2022年4月23日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号