常规下载

控制器自带的 FileContentResult 可以让我们很方便的返回文件到服务端,减少了很多步骤。用于下载文件的时候,像视频、文本、图片这种浏览器支持的文件,默认就会被浏览器打开。这时候想让它变成下载,还需要设置一下响应头,告诉浏览器如何处理才行。

         public ActionResult DownLoadFile(String path, string fileName, string contentType)
{
Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(fileName));
return File(path,contentType);
}

以上,在js使用 location.href = fileDownloadUrl 这样简单的方式即可实现在asp.net mvc5下载文件。关键是这个Content-Disposition,它的内容大概就是说明以什么方式处理,默认的文件名是什么。attachment 是以附件方式处理的意思,后面的就是文件名了,url编码处理之后可以避免那些因为带空格的文件名等等带来的问题。

断点续传下载

        public void FileRangeDownload()
{string fileName = "lubuntu-19.04-desktop-amd64.iso"; //客户端保存的文件名
string filePath = Server.MapPath($"./{fileName}");//要被下载的文件路径 var range = Request.Headers["Range"]; // Range 一般是"bytes=397506944-"
if (!string.IsNullOrWhiteSpace(range))//如果遵守协议,支持断点续传
{
using (StreamReader reader = new StreamReader(System.IO.File.OpenRead(filePath)))
{
var fileLength = new FileInfo(filePath).Length; //文件的总大小
fileLength = reader.BaseStream.Length;
long begin; //文件的开始位置
long end; //文件的结束位置
long.TryParse(range.Split('=')[].Split('-')[], out begin);
long.TryParse(range.Split('-')[], out end);
end = end - begin > ? end : (fileLength - ); //表头 表明 下载文件的开始、结束位置 和文件总大小
Response.AddHeader("Content-Range", "bytes " + begin + "-" + end + "/" + fileLength);
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
Response.StatusCode = ;
Response.TransmitFile(filePath, begin, (end - begin + )); //发送 文件开始位置读取的大小
}
}
else
{
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
Response.TransmitFile(filePath);
}
}

注意点是从请求头读取Range,获得本次请求客户需要下载的区间,如果没有的话就是直接下载,如果有的话注意响应状态修改206,表示返回的内容是部分内容,否则断点续传继续下载可能重新下载。另外Last-Modified、ETag可用来标记资源是否更新,从而决定是否重新下载,这里不做演示。

题外话,这个通过设置响应头来保证文件以附件形式下载的功能早在一年前就用过一次,当时看了一脸懵,也没记下来详细了解,现在又用到了,模模糊糊只记得好像在哪用过一次,当然不记得怎么写了,网上搜,一时又找不到,还是得自己一码一字的敲下来,这样印象深刻而且以后又容易找。什么转载啊,复制粘贴的都是浮云,谁码谁知道!

asp.net mvc5 下载文件方法的更多相关文章

  1. ASP.NET 后台下载文件方法

    void DownLoadFile(string fileName) { string filePath = Server.MapPath(fileName);//路径 //以字符流的形式下载文件 F ...

  2. Asp.net mvc 下载文件

    前言 最近有需求需要下载文件,可能是image的图片,也可能是pdf报告,也可能是微软的word或者excel文件. 这里就整理了asp.net mvc 和asp.net webapi 下载的方法 A ...

  3. .NET两种常见上传下载文件方法

    1.FTP模式 代码如下: (1)浏览 /// <summary> /// 浏览文件 /// </summary> /// <param name="tbCon ...

  4. 前端通过url下载文件方法

    前端通过url下载文件方法 产生背景 浏览器通过url下载文件,当浏览器识别出资深能播放的资源文件,就不会走下载流程,会直接打开 解决方法 1.让后台转成请求的方式,输出文件流(如果想实现批量下载-因 ...

  5. ASP.NET批量下载文件的方法

    一.实现步骤 在用户操作界面,由用户选择需要下载的文件,系统根据所选文件,在服务器上创建用于存储所选文件的临时文件夹,将所选文件拷贝至临时文件夹.然后调用 RAR程序,对临时文件夹进行压缩,然后输出到 ...

  6. asp.net中下载文件的问题

    今天解决web的文件下载问题,下载的方法网上很多,不过我的下载有点特殊: 1.下载按钮在gridview中,是模板列的linkButton: 2.使用了ajax控件: 所以,在下载时总是报错,通过查找 ...

  7. ASP.NET批量下载文件

    一.实现步骤 在用户操作界面,由用户选择需要下载的文件,系统根据所选文件,在服务器上创建用于存储所选文件的临时文件夹,将所选文件拷贝至临时文件夹.然后调用 RAR程序,对临时文件夹进行压缩,然后输出到 ...

  8. asp.net创建XML文件方法

    方法一:按照XML的结构一步一步的构建XML文档.    通过.Net FrameWork SDK中的命名空间"System.Xml"中封装的各种类来实现的 方法一:按照XML的结 ...

  9. Asp.Net 之 下载文件的常用方式

    1.直接使用Response.TransmitFile(filename)方法 protected void Button_Click(object sender, EventArgs e) { /* ...

随机推荐

  1. python编程遇见的异常

    import sys print('目前系统的编码为:',sys.getdefaultencoding()) # 目前系统的编码为: utf-8 name = 'this is a test!' pr ...

  2. 一次使用 Redis 优化查询性能的实践

    因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,一次使用 Redis 优化查询性能的实践 应用背景 有一个应用需要上传一组ID到 ...

  3. 「小程序JAVA实战」小程序视频播放的时候生命周期的控制(56)

    转自:https://idig8.com/2018/09/23/xiaochengxujavashizhanxiaochengxushipinbofangdeshihoushengmingzhouqi ...

  4. Nginx 图片服务器搭建

    安装Nginx >yum install -y nginx 安装vsftpd  http://www.cnblogs.com/eason-d/p/9057389.html 2: 创建目录 /us ...

  5. Proxmox VE 添加软RAID

    apt-get update; apt-get install mdadm     安装软件 mdadm -C <设备名字> 创建模式 -l raid等级,0,1,5之类的 -n 使用的磁 ...

  6. centos7 安装 openvswitch

    1.安装依赖包:   yum -y install make gcc openssl-devel autoconf automake rpm-build redhat-rpm-config yum - ...

  7. IrisBlur - 虹膜模糊

    [IrisBlur - 虹膜模糊] IrisBlur模拟人眼的虹膜,本质上是一个控制程度更高的FieldBlur,在FieldBlur的基础上暴露了更多的参数. Choose Filter >  ...

  8. ORA-10873

    [问题现象] SQL> ALTER DATABASE OPEN; alter database open * ERROR at line 1: ORA-10873: file 36 needs ...

  9. linux 查看文件夹文件大小数目等信息

    1. 查看当前目录所有文件和文件夹的大小 方法一: $du -sh * 或 $du -h -d 0 * '-d 0' 代表查询目录的深度为0 ,也就是当前目录,'-d 3' 表示文件目录深度为3,可以 ...

  10. 稀疏矩阵乘法 · Sparse Matrix Multiplication

    [抄题]: 给定两个 稀疏矩阵 A 和 B,返回AB的结果.您可以假设A的列数等于B的行数. [暴力解法]: 时间分析: 空间分析: [思维问题]: [一句话思路]: 如果为零则不相乘,优化常数的复杂 ...