许可站点不辨认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); 扩大来设置,我们仅仅只需要修改成以下代码:
app.UseStaticFiles(new StaticFileOptions { //设置不限定content-type ServeUnknownFileTypes = true });
然后在重启运转,这个时刻我们再来接见下载这几个文件就没题目了(注重这个时刻下载任何后缀的文件都行),以下截图:
至于cs后缀的文件在google浏览器中是直接显现的内容,这里就不贴图了,有兴致的可以尝尝;
怎样许可下载.nupkg和.apk后缀的文件
经由过程上面例子我们可以运用 ServeUnknownFileTypes = true; 直接设置无限定下载文件范例,这类平常不是太好或许说不许可,亦或许不常说的不安全吧;假如我们只需要增添.nupkg和.apk后缀的文件的下载,那末可以经由过程以下代码来增加mime范例,如:
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文件的代码:
@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代码后是什么模样的:
可以看出这里重要经由过程handler作为参数称号来通报要求的后端要领,下面再来看看后端代码如许写的(为了轻易下载文件的路劲我以love.apk为例):
/// <summary> /// 假造文件地点输出下载 /// </summary> /// <returns></returns> public IActionResult OnPostDown() { var addrUrl = "/bak/love.apk"; return File(addrUrl, "application/vnd.android.package-archive", Path.GetFileName(addrUrl)); } /// <summary> /// 文件流的体式格局输出 /// </summary> /// <returns></returns> public IActionResult OnPostDown01() { var addrUrl = @"D:\F\进修\vs2017\netcore\Study.AspNetCore\WebApp02-1\wwwroot\bak\love.apk"; var stream = System.IO.File.OpenRead(addrUrl); return File(stream, "application/vnd.android.package-archive", Path.GetFileName(addrUrl)); } /// <summary> /// 经由过程HttpClient猎取别的站点的文件流,再输出 /// </summary> /// <returns></returns> public async Task<IActionResult> OnPostDown02() { var path = "https://files.cnblogs.com/files/wangrudong003/%E7%89%B9%E4%BB%B701.gif"; HttpClient client = new HttpClient(); client.BaseAddress = new Uri(path); var stream = await client.GetStreamAsync(path); return File(stream, "application/vnd.android.package-archive", Path.GetFileName(path)); }
后端3个post接收要领都一样运用了FileStreamResult来输出下载文件,差别点在于文件泉源差别;
关于简朴一些的站点来讲,下载文件平常存在于站点目次下,有点相似于我这里的wwwroot/bak目次,因而可以经由过程站点假造目次下载,也就是咋们第一种的下载体式格局;
有一些站点为了文件安全性,平常会存在于web站点的雷同服务器磁盘中,因而需要经由过程这里的第二种体式格局猎取文件流,再通报给File();
末了一种就是把本身其他站点或许他人站点上的文件转一下,当作本身的文件来输出,这类体式格局也就是咋们常说的盗链体式格局之一;
关于razor的handler参数,这里需要注重的是她对应是咋们后端代码OnGetxxx或许OnPostxxx要领中的xxx称号,这是一种razor要求范例,必需要恪守哦。
半年来运用NetCore的一些感受和焦炙
感受:
到如今netcore最新版本2.0,其api很壮大了,就如今我做的几个项目运用来看,她api支撑度很好;之前碰到过也有人问过我有处置惩罚图片的api吗,答案是一定的,如今nuget包社区已经有许多种包支撑图片处置惩罚了,有兴致的朋侪可以去看看https://www.nuget.org/packages;在交叉了几个项目后,深入觉得netcore的进修本钱实在并不高,就netcore的mvc项目而言,只需之前会mvc框架,或是webform(个人觉得对应razor)那用起来是无压力;这里发起有些不敢尝试netcore2.0的朋侪或许觉的有进修本钱的朋侪无妨尝尝;
焦炙:
netcore2.0出来照样有段时候了,这段时候只管有许多朋侪在博客园分享许多相干的文章和git上的项目;然则在3个netqq群中回响反映或许提出netcore开辟碰到的题目状况来看照样很少,不由让人忧郁;固然了我所晓得的几个大牛们或公司的部份手艺决策层的人也在关注并也连续用这再做新项目;其他城市我不相识,就北京这边很有一些创业公司的创业项目起始点就用的是netcore,所以愿望还在张望的朋侪或指导们是时刻最先行动了,一同勤奋推进社区的生长。
以上就是.Net Core之实现下载文件的实例的细致内容,更多请关注ki4网别的相干文章!