• .net Core实战简单文件服务器


      首先新建一个ASP.NET Core 项目,选中空的模板,如下图所示

    image.png

    在NuGet包中添加Microsoft.AspNetCore.StaticFiles

    image.png

    添加好以后我们在Startup.cs中添加对应的中间件(如果不明白中间件是什么查看上一篇)

    默认文件夹是wwwroot 如果不想使用wwwroot需要使用StaticFileOptions来设置目录。

    这里设置一下目录到项目根目录

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)      
    {
                loggerFactory.AddConsole();
                var staticfile = new StaticFileOptions();
                staticfile.FileProvider = new PhysicalFileProvider(@"F:xmcoreXzyFilesServerXzyFilesServerinDebug
    etcoreapp1.1");
                app.UseStaticFiles(staticfile);//使用默认文件夹wwwroot
                if(env.IsDevelopment())
                {           
                    app.UseDeveloperExceptionPage();
                }   
                app.Run(async (context) =>{
                    await context.Response.WriteAsync("HelloWorld!");
                });
    }

    这里我们设置到项目根目录

    然后在根目录创建一个readme.txt文件 

    image.png

    在里面写入.net core

    image.png

    然后程序运行起来访问我们的文件可以看见 成功浏览readme.txt文件

    如果我们需要浏览所有的文件夹及文件,就需要用到UseDirectoryBorwser ,具体如下

    public void ConfigureServices(IServiceCollection services)     
    {
                services.AddDirectoryBrowser();    
    }
           
    // This method gets called by the
    runtime. Use this method to configure the HTTP request pipeline.
          
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)      
    {
                loggerFactory.AddConsole();
                var dir = new DirectoryBrowserOptions();
                dir.FileProvider = new PhysicalFileProvider(@"F:xmcoreXzyFilesServerXzyFilesServerinDebug
    etcoreapp1.1");
                app.UseDirectoryBrowser(dir);
                var staticfile = new StaticFileOptions();
                //制定目录也可以指定其他文件夹
                staticfile.FileProvider = new PhysicalFileProvider(@"F:xmcoreXzyFilesServerXzyFilesServerinDebug
    etcoreapp1.1");
                //如果不指定使用默认文件夹wwwroot
                app.UseStaticFiles(staticfile);
                if(env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
                app.Run(async (context) =>
                {
                    await context.Response.WriteAsync("HelloWorld!");
                });
            }

    这里需要在Startup的ConfigureServices方法中加入services.AddDirectoryBrowser();

    image.png

    程序运行起来后,结果如上图

    我们在换成C盘试一试

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)      
    {
                loggerFactory.AddConsole();
                var dir = new DirectoryBrowserOptions();
                dir.FileProvider = new PhysicalFileProvider(@"C:");
                app.UseDirectoryBrowser(dir);
                var staticfile = new StaticFileOptions();
                //制定目录也可以指定其他文件夹
                staticfile.FileProvider = new PhysicalFileProvider(@"F:xmcoreXzyFilesServerXzyFilesServerinDebug
    etcoreapp1.1");
                //如果不指定使用默认文件夹wwwroot
                app.UseStaticFiles(staticfile);
                if(env.IsDevelopment())
                {               
                    app.UseDeveloperExceptionPage();     
                }
                app.Run(async (context) =>
                {
                    await context.Response.WriteAsync("HelloWorld!");
                });
    }

    image.png

    可以看到,我们可以访问C盘的所有文件夹及文件了。

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

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

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)       
    {
                loggerFactory.AddConsole();
                var dir = new DirectoryBrowserOptions();
                dir.FileProvider = new PhysicalFileProvider(@"C:");
                app.UseDirectoryBrowser(dir);
                var staticfile = new StaticFileOptions();
                //制定目录也可以指定其他文件夹
                staticfile.FileProvider = new PhysicalFileProvider(@"C:");
                staticfile.ServeUnknownFileTypes = true;
                staticfile.DefaultContentType = "application/x-msdownload";//设置默认MIMEType
                //如果不指定使用默认文件夹wwwroot
                app.UseStaticFiles(staticfile);
                if(env.IsDevelopment())
                {         
                    app.UseDeveloperExceptionPage();
                }
                app.Run(async (context) =>
                {
                    await context.Response.WriteAsync("HelloWorld!");
                });
    }

    设置好后 对于未识别的,默认浏览器会下载这些文件。

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

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

    image.png

    手机访问效果图如上

  • 相关阅读:
    BZOJ 3997: [TJOI2015]组合数学 [偏序关系 DP]
    [Sdoi2017]新生舞会 [01分数规划 二分图最大权匹配]
    [Sdoi2017]相关分析 [线段树]
    [Sdoi2017]硬币游戏 [高斯消元 KMP]
    [Sdoi2017]序列计数 [矩阵快速幂]
    [Sdoi2017]树点涂色 [lct 线段树]
    [Sdoi2017]数字表格 [莫比乌斯反演]
    BZOJ 3160: 万径人踪灭 [fft manacher]
    Rabbitmq常见测试
    MQ(消息队列)功能介绍
  • 原文地址:https://www.cnblogs.com/xuzeyu/p/9400806.html
Copyright © 2020-2023  润新知