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

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

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

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

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

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

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

然后不用修改任何代码或设置,直接启动站点,再直接在浏览器地址栏分别录入下载文件地址,如:

http://localhost:1120/bak/excel.xls

http://localhost:1120/bak/love.apk

http://localhost:1120/bak/stackexchange.redis.1.2.6.nupkg

http://localhost:1120/bak/Startup.cs

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

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

            app.UseStaticFiles(new StaticFileOptions{                //设置不限制content-typeServeUnknownFileTypes = 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的朋友或者觉的有学习成本的朋友不妨试试;netcore官网文档:https://docs.microsoft.com/en-us/aspnet/core/

焦虑:

netcore2.0出来还是有段时间了,这段时间尽管有很多朋友在博客园分享很多相关的文章和git上的项目;但是在3个netqq群中反应或者提出netcore开发遇到的问题情况来看还是很少,不由让人担心;当然了我所知道的几个大牛们或公司的部分技术决策层的人也在关注并也陆续用这再做新项目;其他城市我不了解,就北京这边很有一些创业公司的创业项目起始点就用的是netcore,所以希望还在观望的朋友或领导们是时候开始行动了

原文地址:http://www.cnblogs.com/wangrudong003/p/7592689.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

.NetCore之下载文件相关推荐

  1. 【NetCore】.NetCore之下载文件

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

  2. NetCore之下载文件

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本篇将和 ...

  3. 用python下载文件的若干种方法汇总

    压缩文件可以直接放到下载器里面下载的 you-get 连接 下载任意文件 重点 用python下载文件的若干种方法汇总 写文章 用python下载文件的若干种方法汇总 zhangqibot发表于Met ...

  4. 初级版python登录验证,上传下载文件加MD5文件校验

    服务器端程序 import socket import json import struct import hashlib import osdef md5_code(usr, pwd):ret = ...

  5. linux快捷上传下载文件

    借助securtCRT,使用linux命令sz可以很方便的将服务器上的文件下载到本地,使用rz命令则是把本地文件上传到服务器 其中,对于sz和rz的理解与记忆我用了如下的方法(因为很多时候容易搞混): ...

  6. 基于php下载文件的详解

    基于php下载文件的详解 本篇文章是对php下载文件进行了详细的分析介绍,需要的朋友参考下 php下载文件,比如txt文件. 出现的效果就是,弹出浏览器自带的下载框,出现另存为操作.有时候会出现内存溢 ...

  7. java上传加密_Java上传下载文件并实现加密解密

    使用 Jersey 服务器实现上传,使用 HTTP 请求实现下载 引入依赖 在 pom.xml 中添加 Jersey 相关依赖 com.sun.jersey jersey-client 1.18.1 ...

  8. sftp shell 批量上传文件_Shell自动上传下载文件到SFTP服务器

    1.说明 本文提供一个Shell脚本, 可以自动连接到SFTP服务器, 然后上传或者下载指定的文件, 进而可以使用Linux的corntab命令, 定时执行脚本上传下载文件, 实现文件的同步或者备份功 ...

  9. php 当前页面下载文件,php实现当前页面点击下载文件的简单方法

    php实现当前页面点击下载文件的简单方法 发布于 2017-08-02 17:44:21 | 80 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext ...

最新文章

  1. ADC的参数分析以及采样分析
  2. 【组合数学】排列组合 ( 多重集组合数 | 所有元素重复度大于组合数 | 多重集组合数 推导 1 分割线推导 | 多重集组合数 推导 2 不定方程非负整数解个数推导 )
  3. assert宏的用法
  4. Linux下GCC与G++的区别和联系
  5. 计算机未来的储存装置,图说计算机存储设备
  6. HLS-搭建Nginx流媒体服务器
  7. 这些让人看瞎了的设计!实力证明,谁才是世界的最终boss!
  8. java socket程序应用_socket应用小程序
  9. 项目实用-不登录就无法访问主页
  10. iOS :APP 提交描述注意事项
  11. xp系统打印服务器自动关闭,XP系统服务管理Print spooler自动关闭的解决办法
  12. oracle字体库 生僻字,繁难字库生僻字大全-找字网_免费字体下载、字体在线商用授权、ttf字体分享、专业字体网站!...
  13. SpringBoot - Spring 家族的技术体系
  14. mac开机启动项怎么设置,苹果电脑开机启动项在哪里设置
  15. iOS的崩溃率高于Android?来自听云的数据告诉你真相
  16. 《DNS稳定保障系列3--快如闪电,域名解析秒级生效》
  17. php计算百分比加成_如何从PHP中的2个值计算百分比变化(增加和减少)
  18. 关于指针所占的字节数
  19. 全网最全开源工业缺陷数据集汇总
  20. 开发类似斗鱼虎牙的运营级直播平台多少钱

热门文章

  1. 《超越需求:敏捷思维模式下的分析》—第1章 1.1节简介
  2. python引入模块时import与from ... import的区别
  3. MyBatis学习总结(17)——Mybatis分页插件PageHelper
  4. django基础1--django安装与helloworld测试
  5. Wiwiz无线Web认证实现限速
  6. 4. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识wrk、wrk2
  7. C#中的表达式和运算符
  8. Prism区域异常问题分析(导航失效?)
  9. WPF XAML 为项目设置全局样式
  10. 太妙了!微软670页《dotnet官方手册》火了,完整PDF开放下载!