ASP.NET Core 返回文件、用户下载文件,从网站下载文件,动态下载文件

ASP.NET Core 中,可以在静态目录添加文件,直接访问就可以下载。但是这种方法可能不安全,也不够灵活。

我们可以在 Controller 控制器中 添加 一个 Action,通过此Action,即可访问服务器的任何文件。


Action 格式

    public FileResult Down()
{
        return File(xxx,xxx,xxx);
}

返回 FileResult 类型,File() 对象

就这么简单。


File() 对象

问题在于这个 File() 对象,应该怎么写

笔者举个例子

在100%无错的条件下,文件路径 F:\a.txt

1,创建一个文件流 FileStream

2,获取文件类型 Content-Type,可以用代码获取,也可以用字符串填写

3,设置文件名

var stream = System.IO.File.OpenRead(“F:\a.txt”);  //创建文件流

txt 的文件类型为 text/plain

设置文件名为 b.txt

那么返回的File 代码如下

return File(stream, "text/plain", “b.txt");

就这么简单。


获取文件类型

C#获取文件类型可以参考

http://www.cnblogs.com/zzsdream/articles/5796763.html

关于文件类型对应得Context-Type

http://tool.oschina.net/commons/

笔者附上小方法

//引入
using System.IO; var contentype = MimeMapping.GetMimeMapping(fileName);     //获取文件类型

动态获取文件

 public FileResult DownSH(string DownM)  //要下载文件码
{
var path = _sqlContext.jexusSqls.FirstOrDefault(a => a.DownM == DownM.ToString()).FilePath; //在数据库查找此文件码的文件地址
if (!System.IO.File.Exists(path)) return null; var stream = System.IO.File.OpenRead(path); //创建文件流 return File(stream, "application/x-sh", DownM+".sh");
}

编写方式多种多样,只需要解决文件流、文件类型、文件名,这三个核心即可。

上一篇:利用.htaccess绑定子域名到子目录(亲测万网可用)


下一篇:Normalize.css源码注释翻译&浏览器css兼容问题的理解