.Net Core之实现下载文件的实例


本文摘自PHP中文网,作者黄舟,侵删。

本篇将和大家分享的丝.NetCore下载文件,常见的下载有两种:A标签直接指向下载文件地址和post或get请求后台输出文件流的方式,本篇也将围绕这两种来分享;如果对您有好的帮助,请多多支持。

  • 允许站点不识别content-type下载文件(即:不受mime类型限制下载)

  • 如何允许下载.nupkg和.apk后缀的文件

  • Razor模板的post下载文件例子

  • 半年来使用NetCore的一些感想和焦虑

允许站点不识别content-type下载文件(即:不受mime类型限制下载)

对于netcore的web项目而言,内置了一些content-type允许下载的文件类型;我们将通过一个普通的razorweb项目来看看直接通过连接下载excel例子;首先,在项目的wwwroot目录创建一个bak文件夹,然后在该目录下存放如下几种文件:

通过测试这个时候只有excel.xls文件是能直接被下载的,其他的都是404:

要想.apk,.nupkg.cs等后缀的文件不被限制,我们可以通过 public static IApplicationBuilder UseStaticFiles(this IApplicationBuilder app, StaticFileOptions options); 扩展来设置,我们仅仅只需要修改为如下代码:

1

2

3

4

app.UseStaticFiles(new StaticFileOptions

{                //设置不限制content-type

    ServeUnknownFileTypes = true

});

然后在重启运行,这个时候我们再来访问下载这几个文件就没问题了(注意这个时候下载任何后缀的文件都行),如下截图:

至于cs后缀的文件在google浏览器中是直接显示的内容,这里就不贴图了,有兴趣的可以试试;

如何允许下载.nupkg和.apk后缀的文件

通过上面例子我们能够使用 ServeUnknownFileTypes = true; 直接设置无限制下载文件类型,这种通常不是太好或者说不允许,亦或者不常说的不安全吧;如果我们只需要增加.nupkg和.apk后缀的文件的下载,那么可以通过如下代码来添加mime类型,如:

1

2

3

4

5

6

7

8

app.UseStaticFiles(new StaticFileOptions

            {                //ServeUnknownFileTypes = true

                ContentTypeProvider = new FileExtensionContentTypeProvider(new Dictionary<string, string>

                {

                    { ".apk","application/vnd.android.package-archive"},

                    { ".nupkg","application/zip"}

                })

            });

同样的也能对excel,apk,nupkg后缀的文件进行下载:

但是这个时候我们访问 http://localhost:1120/bak/Startup.cs 就得不到下载的内容了:

因为我们没有添加对.cs文件的扩展类型,故而系统直接给咋们返回404;这里我们通过FileExtensionContentTypeProvider对象的构造函数传递了一个mapping的dic类型来让项目知道允许下载的content-type类型的文件;

Razor模板的post下载文件例子

老实说最近一端时间有空我就会研究下Razor模板,下面我们将通过她的post表单的方式来请求后端下载文件的方法;下面直接给出login.cshtml文件的代码:

1

2

3

4

5

6

7

@page

@model LoginModel

@{}<form method="post">

    <button type="submit" asp-page-handler="down" class="btn">下载</button>

    <button type="submit" asp-page-handler="down01" class="btn">下载01</button>

    <button type="submit" asp-page-handler="down02" class="btn">下载02</button>

</form>

这里值得注意的是,razor通过asp-page-handler=来执行请求后端的方法,我们来看看最终她生成的html代码后是什么样子的:

阅读剩余部分

相关阅读 >>

c#中ini配置文件的图文代码详解

比较c#和java中面向对象语法的区别

asp.net core中的多语言支持的图文详解

详细了解在.net core 上运行的wordpress

基于.net平台常用的框架整理的详细介绍

c#中使用反射以及特性简化的实例代码

c#如何通过对象属性名修改值的实例

asp.net--详解core的安装和介绍

.net core 2.0 preview2的详细介绍

c#如何连接加密数据库(sqlite)的示例分享

更多相关阅读请进入《.net》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...