当前位置:首页 > 日记 > 正文

ASP.NET Core 2.0 本地文件操作问题及解决方案

ASP.NET Core 2.0 本地文件操作问题及解决方案

问题

如何在ASP.NET Core 2.0中受限地访问本地目录和文件信息?

答案

新建一个空项目,修改Startup类,添加访问本地文件所需的服务:

public void ConfigureServices(IServiceCollection services){ services.AddSingleton<IFileProvider>(  new PhysicalFileProvider(Directory.GetCurrentDirectory()));}

创建一个中间件,读取根目录下的所有文件,输出文件名:

public class HelloFileProviderMiddleware{ private readonly RequestDelegate _next; private readonly IFileProvider _fileProvider; public HelloFileProviderMiddleware(RequestDelegate next, IFileProvider fileProvider) {  _next = next;  _fileProvider = fileProvider; } public async Task Invoke(HttpContext context) {  var output = new StringBuilder("");  IDirectoryContents dir = _fileProvider.GetDirectoryContents("");  foreach (IFileInfo item in dir)  {   output.AppendLine(item.Name);  }  await context.Response.WriteAsync(output.ToString()); }}public static class UseHelloFileProviderExtensions{ public static IApplicationBuilder UseHelloFileProvider(this IApplicationBuilder app) {  return app.UseMiddleware<HelloFileProviderMiddleware>(); }}

运行,此时页面效果:

当然,我们也可以通过IFileProvider接口读取单个文件信息:

public class HelloFileProviderMiddleware{ private readonly RequestDelegate _next; private readonly IFileProvider _fileProvider; public HelloFileProviderMiddleware(RequestDelegate next, IFileProvider fileProvider) {  _next = next;  _fileProvider = fileProvider; } public async Task Invoke(HttpContext context) {  IFileInfo file = _fileProvider.GetFileInfo("Startup.cs");  using (var stream = file.CreateReadStream())  {   using (var reader = new StreamReader(stream))   {    var output = await reader.ReadToEndAsync();    await context.Response.WriteAsync(output.ToString());   }  } }}

运行,此时页面效果:

讨论

ASP.NET Core 2.0提供了继承自接口IFileProvider的PhysicalFileProvider类型,用于受限地访问本地文件系统,它是对System.IO.File的一个封装。

我们可以在Startup的Configure()方法内将IFileProvider配置为一个服务,然后通过构造函数注入添加到中间件或者控制器中。这样可以在一个地方控制文件的访问路径(也就是应用程序启动的时候)。

IFileProvider有两个重要的方法:

1. GetDirectoryContents:返回IDirectoryContents接口。可用于遍历某个目录中的全部文件或目录。

2. GetFileInfo:返回IFileInfo接口。通过其CreateReadSteam方法可以读取文件内容。

====start by sanshi=========================

下面通过递归来遍历根目录下全部文件和目录,修改中间件代码:

public class HelloFileProviderMiddleware{ private readonly RequestDelegate _next; private readonly IFileProvider _fileProvider; public HelloFileProviderMiddleware(RequestDelegate next, IFileProvider fileProvider) {  _next = next;  _fileProvider = fileProvider; } public async Task Invoke(HttpContext context) {  var output = new StringBuilder("");  ResolveDirectory(output, "", "");  await context.Response.WriteAsync(output.ToString()); } private void ResolveDirectory(StringBuilder output, string path, string prefix) {  IDirectoryContents dir = _fileProvider.GetDirectoryContents(path);  foreach (IFileInfo item in dir)  {   if (item.IsDirectory)   {    output.AppendLine(prefix + "[" + item.Name + "]");    ResolveDirectory(output,     item.PhysicalPath.Substring(Directory.GetCurrentDirectory().Length),     prefix + " ");   } else   {    output.AppendLine(prefix + item.Name);   }  } }} 

运行,此时页面效果:

====end by sanshi=========================

源代码下载

总结

以上所述是小编给大家介绍的ASP.NET Core 2.0 本地文件操作问题及解决方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

相关文章

AI如何使用黄金比例绘制鲸鱼logo?

AI如何使用黄金比例绘制鲸鱼logo?

绘制,黄金,鲸鱼,如何使用,比例,版权申明:本文原创作者&ldquo;格律设计&rdquo;,感谢&ldquo;格律设计&rdquo;的原创经验分享!最近,很多网友问小编ai怎么做黄金比例lo?接下来小编就给大家分享AI使用黄金比例绘制鲸鱼lo的方法?教程难度不大,主要介绍运…

让div运动起来 js实现缓动效果

让div运动起来 js实现缓动效果

缓动,运动,效果,电脑软件,div,本文实例为大家分享了js实现缓动效果的具体代码,供大家参考,具体内容如下var tween = { linear:function(t,b,c,d){ return c*t/d + b; }, easeIn:function(t,b,c,d){ return c * ( t /= d ) * t + b; …

excel表格的筛选数字范围的教程

excel表格的筛选数字范围的教程

数字,教程,筛选,表格,电脑软件,  Excel中的筛选功能可以筛选数据,具体该如何筛选数字范围呢?下面是小编带来的关于excel表格的筛选数字范围的教程,希望阅读过后对你有所启发!excel表格的筛选数字范围的教程:  筛选数字范围步骤1:选中当前列…

Javascript设计模式之装饰者模式详

Javascript设计模式之装饰者模式详

设计模式,装饰者模式,详解,电脑软件,Javascript,一、前言:装饰者模式(Decorator Pattern):在不改变原类和继承的情况下动态扩展对象功能,通过包装一个对象来实现一个新的具有原对象相同接口的新的对象。装饰者模式的特点:1. 在不改变原对象的原本…

excel2007设置共享模式的方法excel

excel2007设置共享模式的方法excel

模式,设置,方法,如何设置,电脑软件,  Excel中经常需要使用到共享模式进行多人录入,共享模式具体该如何设置出来呢?下面是由小编分享的excel2007设置共享模式的方法,以供大家阅读和学习。excel2007设置共享模式的方法设置共享模式步骤1:首先…

ps怎样把人物照片制作成一寸红底证

ps怎样把人物照片制作成一寸红底证

照片,一寸,人物,证件照,电脑软件,ps怎样把人物照片制作成一寸红底证件照?运用PHOTOSHOP软件,可以很简单的制作大家想要的照片,下面和小编一起来看看具体步骤吧。最终效果 具体步骤:打开一张证件照片,首先在【图像】选项卡里面查看一下的大小。…

简单谈谈Javascript函数中的argume

简单谈谈Javascript函数中的argume

函数,简单,电脑软件,Javascript,arguments,一、arguments的面貌在javascript中所有的函数内部都包含了一个隐藏的变量叫arguments;它存放着所有传递到这个函数中的参数;那么我们打开实例看看arguments的输出形式(function fn(){ console.log…

用 js 的 selection range 操作选

用 js 的 selection range 操作选

区域,选择,操作,内容,电脑软件,先放上最后的效果,这是点击图片以前:这是点击图片以后:非常清晰,一目了然,就算是小白用户也明白发生了什么。挺好的。最近在做编辑器相关的东西,遇到一个需求,用户在编辑器中插入或者粘贴的图片要支持点击以后,可以按…

ps怎么制作一层一层延伸的洞穴特效

ps怎么制作一层一层延伸的洞穴特效

洞穴,特效,电脑软件,ps,巧用photoshop的滤镜功能,可以制作许多意想不到的特效图片,这里笔者以介绍一款迷幻洞穴的制作方法,简要介绍滤镜的使用功能。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2015-11-041、首先…

Photoshop设计制作漂亮的春季小清

Photoshop设计制作漂亮的春季小清

设计制作,春季,海报,漂亮,电脑软件,作者制作电商海报非常有经验,前期需要找一些同类的产品海报进行参考;然后根据自身产品特点构思画面并画出草图;再搜集素材;后期溶图,调色,并增加文案即可。最终效果1、轮廓图。2、下面是根据自己的构思找到的素…

JS异步加载的三种实现方式

JS异步加载的三种实现方式

异步加载,三种,方式,电脑软件,JS,js加载的缺点:加载工具方法没必要阻塞文档,过多js加载会影响页面效率,一旦网速不好,那么整个网站将等待js加载而不进行后续渲染等工作。 有些工具方法需要按需加载,用到再加载,不用不加载,。默认正常模式下下,JS是…

JS鼠标滚动分页效果示例

JS鼠标滚动分页效果示例

鼠标,分页,示例,效果,电脑软件,首先先看问题:在开发的时候,看到这种现象 就会思考:为什么左边的数据出来比右边的慢呢?因为这里没有进行分页,左边的数据多,所以查询相对较慢。解决办法就是进行分页,但是在项目中用到的插件,不能控制样式,改变分页的…