.net core 2.0学习笔记(A11):实战简单文件服务器

前言:本案例适合入门来看。

首先,新建一个ASP.NET Core项目,项目名称:StaticFilesServer 选择空的模板,如下图:
.net core 2.0学习笔记(A11):实战简单文件服务器_第1张图片

使用NUGet命令添加Microsoft.AspNetCore.StaticFiles引用:
Install-Package Microsoft.AspNetCore.StaticFiles

添加好引用以后,在Startup.cs中的Congure方法下添加如下代码:

         public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseStaticFiles();//使用默认文件夹wwwroot
            app.Run(async (context) =>
            {
                await context.Response.WriteAsync("Hello World!");
            });
        }

接着在wwwroot文件夹中添加一张图:a01.jpg
.net core 2.0学习笔记(A11):实战简单文件服务器_第2张图片
程序运行起来访问http://localhost:7335/a01.jpg 如下图
.net core 2.0学习笔记(A11):实战简单文件服务器_第3张图片

如果不想使用默认wwwroot文件夹怎么办呢?这里可以使用StaticFileOptions来设置指定目录。代码如下:

       public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {

            var staticfile = new StaticFileOptions();
            staticfile.FileProvider = new PhysicalFileProvider(@"c:\");//指定目录,这里指定C盘,也可以是其他目录
            app.UseStaticFiles(staticfile);//使用默认文件夹wwwroot

            app.Run(async (context) =>
            {
                await context.Response.WriteAsync("Hello World!");
            });
        }

然后再c盘新建一个readme.txt文件,在里面写入.net core,程序运行起来访问:

http://localhost:7335/readme.txt
就可以成功浏览readme.txt文件

如果我们需要浏览所有文件夹以及文件,就需要用UseDirectoryBrowser,代码如下:

      public void ConfigureServices(IServiceCollection services)
        {
            services.AddDirectoryBrowser();//需要加入这个以启用
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            var dir = new DirectoryBrowserOptions();
            dir.FileProvider = new PhysicalFileProvider(@"c:\");
            app.UseDirectoryBrowser(dir);
        }

此时,当我们运行程序http://localhost:7335/ 后,如下图所示

.net core 2.0学习笔记(A11):实战简单文件服务器_第4张图片
这样我们就可以浏览C盘的所有文件夹以及文件了。

当打开一些文件时会发现,有些文件打开会出现404错误,有些又可以打开。那是因为MIME Type没有识别出来。

我们可以手动设置这些MIME Type,也可以给这些未识别的设置一个默认值。具体代码如下:

            var staticfile = new StaticFileOptions();
            #region 设置默认MIME Type
            staticfile.ServeUnknownFileTypes = true;
            staticfile.DefaultContentType = "application/x-msdownload";
            var provider = new FileExtensionContentTypeProvider();
            provider.Mappings.Add(".log","text/plain");//手动设置对应MIME Type
            staticfile.ContentTypeProvider = provider;
            #endregion
            staticfile.FileProvider = new PhysicalFileProvider(@"c:\");//指定目录,这里指定C盘,也可以是其他目录
            app.UseStaticFiles(staticfile);//使用默认文件夹wwwroot

设置好以后,对于未识别的,默认为application/x-msdownload,浏览器会下载这些文件。
这些.log就被手动设置为文本方式,浏览器会将其展示出来。这样我们就实现了一个简单的文件服务器。

如果想用手机查看电脑的图片或者视频等文件,在程序加一句代码就可以实现了:
在Program.cs中

     public class Program
        {
           public static void Main(string[] args)
            {
                BuildWebHost(args).Run();
            }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
              .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseUrls("http://*:7335")//加上这个就能通过域名访问
                .UseStartup()
                .Build();
    }

这样就可以在同一个局域网内,在手机上使用浏览器访问电脑C盘中的文件了。

你可能感兴趣的:(【.net,core】)