首页 > 编程语言 >ASP.NET Core 使用app.UseStaticFiles配置静态文件中间件,达到类似IIS中虚拟目录的效果,可访问位于 Web 根目录之外的文件

ASP.NET Core 使用app.UseStaticFiles配置静态文件中间件,达到类似IIS中虚拟目录的效果,可访问位于 Web 根目录之外的文件

时间:2023-03-06 16:44:35浏览次数:61  
标签:文件 UseStaticFiles StaticFiles app 中间件 new 根目录 staticfile

1、项目中静态文件存放在wwwroot文件夹之下,如下:要访问nihao.jpg这个文件夹,url路径可以这样写:

<img src="~/images/inhao.jpg" alt="pic"/>


wwwroot
css
images
nihao.jpg
js
那么我要访问D盘的MyStaticFiles文件夹下的images文件夹下的banner1.svg问件该如何呢?

这时我们可以在Startup.cs文件中配置app.UseStaticFiles来实现

D:/MyStaticFiles
images
banner1.svg
配置如下:

  1.   public void Configure(IApplicationBuilder app)
  2.   {
  3.       app.UseStaticFiles();
  4.    
  5.       app.UseStaticFiles(new StaticFileOptions
  6.       {
  7.           FileProvider = new PhysicalFileProvider("D:/MyStaticFiles"),
  8.           RequestPath = "/StaticFiles"
  9.       });
  10.   }


在cshtml中使用路径以访问D盘的MyStaticFiles文件夹下的images文件夹下的banner1.svg:

<img src="~/StaticFiles/images/banner1.svg" alt="pic"/>


msdn官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/static-files?view=aspnetcore-2.1&tabs=aspnetcore2x#serve-static-files
————————————————

 

ASP.NET Core 开发-中间件(StaticFiles)使用

ASP.NET Core 开发,中间件(StaticFiles)的使用,我们开发一款简易的静态文件服务器。

告别需要使用文件,又需要安装一个web服务器。现在随时随地打开程序即可使用,跨平台,方便快捷。

前一篇讲解了中间件的开发,了解了中间件的知识。

下面我们就来使用StaticFiles 开发一款简易静态文件服务器。还可以直接运行纯静态的网站。

新建的ASP.NET Core 项目,不是空的,也就会自带StaticFiles 。wwwroot 就是靠这个中间件读取的。

 

使用StaticFiles 中间件

新建一个asp.net core项目,选择空的模板。

添加 Microsoft.AspNetCore.StaticFiles 引用

Install-Package Microsoft.AspNetCore.StaticFiles -Pre

添加好引用以后,我们在Startup.cs 添加

  1.   public void Configure(IApplicationBuilder app)
  2.   {
  3.   app.UseStaticFiles();//使用默认文件夹wwwroot
  4.   app.Run(async (context) =>
  5.   {
  6.   await context.Response.WriteAsync("Hello World!");
  7.   });
  8.   }

我们在wwwroot 添加一张图 ASP-NET-Banners-01.png

然后程序运行起来

http://localhost:5000/ASP-NET-Banners-01.png

 

如果我不想使用默认文件夹咋办呢,我们可以使用 StaticFileOptions

  1.   public void Configure(IApplicationBuilder app)
  2.   {
  3.   var staticfile = new StaticFileOptions();
  4.   staticfile.FileProvider = new PhysicalFileProvider(@"C:\");//指定目录 这里指定C盘,也可以是其它目录
  5.   app.UseStaticFiles(staticfile);
  6.   app.Run(async (context) =>
  7.   {
  8.   await context.Response.WriteAsync("Hello World!");
  9.   });
  10.   }

 

我在c盘新建一个readme.txt  写入 .net core 。

然后访问: http://localhost:5000/readme.txt

 一个文件服务器,应该可以浏览所有文件。

我们就要用到UseDirectoryBrowser 

  1.   public void ConfigureServices(IServiceCollection services)
  2.   {
  3.   services.AddDirectoryBrowser();
  4.   }
  5.    
  6.   public void Configure(IApplicationBuilder app)
  7.   {
  8.   var dir = new DirectoryBrowserOptions();
  9.   dir.FileProvider= new PhysicalFileProvider(@"C:\");
  10.   app.UseDirectoryBrowser(dir);
  11.   var staticfile = new StaticFileOptions();
  12.   staticfile.FileProvider = new PhysicalFileProvider(@"C:\");//指定目录 这里指定C盘,也可以是其它目录
  13.   app.UseStaticFiles(staticfile);
  14.   }

这里要在 ConfigureServices 方法加入

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDirectoryBrowser();
        }

访问:http://localhost:5000/

 

这样我们就能浏览C盘的文件了。

你会发现有些文件打开会404,有些又可以打开。那是因为MIME 没有识别出来。

我们可以手动设置这些 MIME ,也可以给这些未识别的设置一个默认值。

  1.   public void Configure(IApplicationBuilder app)
  2.   {
  3.   var dir = new DirectoryBrowserOptions();
  4.   dir.FileProvider= new PhysicalFileProvider(@"C:\");
  5.   app.UseDirectoryBrowser(dir);
  6.   var staticfile = new StaticFileOptions();
  7.   staticfile.FileProvider = new PhysicalFileProvider(@"C:\");//指定目录 这里指定C盘,也可以是其它目录
  8.   staticfile.ServeUnknownFileTypes = true;
  9.   staticfile.DefaultContentType = "application/x-msdownload"; //设置默认 MIME
  10.   var provider = new FileExtensionContentTypeProvider();
  11.   provider.Mappings.Add(".log", "text/plain");//手动设置对应MIME
  12.   staticfile.ContentTypeProvider = provider;
  13.   app.UseStaticFiles(staticfile);
  14.   }

 

设置好以后,对于未识别的,默认为下载。 .log 就被我手动设置成文本方式。

 

对于前面的这么多设置,StaticFiles 提供了一种简便的写法。UseFileServer

            app.UseFileServer(new FileServerOptions()
            {
                FileProvider = new PhysicalFileProvider(@"C:\"),
                EnableDirectoryBrowsing = true
            });

如果需要加上MIME,StaticFileOptions 需要绑定上。

实际应用

不知道大家平时有没有这样的需求,手机想查看电脑的图片或者视频等文件。

这里我们将程序稍微加加一句代码就可以实现了。

在 Program.cs 中

  1.   public static void Main(string[] args)
  2.   {
  3.   var host = new WebHostBuilder()
  4.   .UseKestrel()
  5.   .UseContentRoot(Directory.GetCurrentDirectory())
  6.   .UseIISIntegration()
  7.   .UseUrls("http://*:5000")//加上这个就能用ip:5000访问
  8.   .UseStartup<Startup>()
  9.   .Build();
  10.    
  11.   host.Run();
  12.   }

在同一局域网内,使用 ip:5000 就可以访问。这样就能访问电脑的文件。

 

转 https://blog.csdn.net/hwt0101/article/details/117689506

标签:文件,UseStaticFiles,StaticFiles,app,中间件,new,根目录,staticfile
From: https://www.cnblogs.com/wl-blog/p/17184423.html

相关文章

  • ASP.NET Core文件上传与下载(多种上传方式)
    前言前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NETCore了.打算写个系列,但是还没想好目录,今天先来一篇,后面在整理吧.ASP.NETCore2.0发展到现在,已......
  • CSharp上传文件夹的三种解决方案
    ​ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现。下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压。ASP.NE......
  • spring下载文件
    @GetMapping("downloadImg")publicResponseEntity<byte[]>downloadImg(HttpServletRequestrequest){StringrealPath=request.getServletContext().getRealPat......
  • .gitignore文件用法及如何配置
    .gitignore文件是在git提交的时候用来屏蔽某些你不想提交上去的文件。项目开发过程中,有时候不想把一些文件(如中间文件/编译文件等)提交到git上。这个时候就由.gitignore文......
  • FTP文件传输协议 :文件传输结束如何判断
    小结:FTP服务器有两大部分组成:一个主进程,负责接受新的请求;还有若干从属进程,负责处理单个请求。FTP文件传输协议经典问题:文件传输结束如何判断-知识库-新睿云https://......
  • 加深spring上传文件
    上传文件的详解创建控制层,上传文件:@ControllerpublicclassMyController{@PostMapping("/myUpload")publicStringupload(HttpServletRequestrequest){......
  • cp 命令复制文件遇到的问题
    [root@himawaribozhou]#cp/etc/skel/.*cp:目标"/etc/skel/.bashrc"不是目录/etc/skel/.bashrc是文件,必须复制到一个目录里,所以命令后面要加.表示当前目录[......
  • Java 合并多个碎片文件到一个文件,也可以直接使用linux cat命名
    Java合并多个碎片文件到一个文件,也可以直接使用linuxcat命名linuxcat命令cat*.zip.*>out.zipjava工具使用方式#编译javacCombineFile.java#执行javaComb......
  • 阿里云OSS文件上传
    阿里OSS文件上传Controllerpackagecom.zft.web.controller.common;importcom.zft.adaptor.common.constants.FileConstants;importcom.zft.adaptor.utils.file.Com......
  • 删除 VS Code 编辑器右侧的文件预览
    这个美女是最近一次更新后出现的,让我很分心。我搜索了菜单,但没有找到任何设置来删除它。有什么办法可以从编辑器中消除它吗?解答http://www.stackoverflow.ink......