ASP.NET Core 实现 简单文件服务器

首先新建一个ASP.NET Core项目,选择空的模板。

使用NuGet命令添加Microsoft.AspNetCore.StaticFiles引用:

Install-Package Microsoft.AspNetCore.StaticFiles

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


        public void Configure(IApplicationBuilder app)
        {
            app.UseStaticFiles();//使用默认文件夹wwwroot

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

接着在wwwroot文件夹(没有的话可以自己新建一个文件夹,取名wwwroot)中添加一张图:NET-Core.png。

程序运行后访问http://localhost:*/NET-Core.png ,就会在页面上显示这张图片

如果不想使用默认wwwroot文件夹,可以使用StaticFileOptions来设置指定目录

具体代码如下:


        public void Configure(IApplicationBuilder app)
        {
            //更改默认文件夹 (StaticFileOptions方法)
            var staticfile = new StaticFileOptions();
            staticfile.FileProvider = new PhysicalFileProvider(@"C:\");//指定目录,这里指C盘,也可以是其他目录
         app.UseStaticFiles(staticfile);

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

然后在C盘新建一个readme.txt文件,在里面写入.net core, 

程序运行后访问: http://localhost:*/readme.txt,如下图所示:

成功浏览readme.txt文件

如果我们需要浏览所有文件夹及文件,就要用到UseDirectoryBrowser, 下面代码是浏览C盘的所有文件:

        public void ConfigureServices(IServiceCollection services)
        {
            //使用UseDirectoryBrowser ,需要在这里加入services.AddDirectoryBrowser();
            services.AddDirectoryBrowser();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app)
        {
            //app.UseStaticFiles();//使用默认文件夹wwwroot

            var dir = new DirectoryBrowserOptions();
            dir.FileProvider = new PhysicalFileProvider(@"C:\");
            app.UseDirectoryBrowser(dir);

            //更改默认文件夹 (StaticFileOptions方法)
            var staticfile = new StaticFileOptions();
            staticfile.FileProvider = new PhysicalFileProvider(@"C:\");//指定目录,这里指C盘,也可以是其他目录

            //手动设置MIME Type,或者设置一个默认值, 以解决某些文件MIME Type文件识别不到,出现404错误
            staticfile.ServeUnknownFileTypes = true;
            staticfile.DefaultContentType = "application/x-msdownload";//设置默认MIME Type
            var provider = new FileExtensionContentTypeProvider();//使用一组默认映射创建新的提供程序
            provider.Mappings.Add(".log", "text/plain");//手动设置对应MIME Type
            staticfile.ContentTypeProvider = provider; //将文件映射到内容类型

            app.UseStaticFiles(staticfile);

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

手动设置MIME Type 是为了防止有些文件MIME Type识别不出来 就会出现404错误。也可以给这些未识别的设置一个默认值解决

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

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

        在Program.cs中

public static void Main(string[] args)
      {
            var host = new WebHostBuilder()
              .UseKestrel()
              .UseContentRoot(Directory.GetCurrentDirectory())
              .UseIISIntegration()
              .UseUrls("http://*:5000") //加上这个就能通过http://ip5000访问
              .UseStartup<Startup>()
              .Build();

        host.Run();
      }

         这样在同一局域网内,在手机上使用浏览器访问http://ip:5000,就能访问电脑中C盘的文件了.

猜你喜欢

转载自blog.csdn.net/love_pgme/article/details/88642216