zoukankan      html  css  js  c++  java
  • .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

    手机访问效果图如上

  • 相关阅读:
    酷狗大数据平台架构是如何重构的
    分层架构,前后端分离有啥坏处?
    Redis快速入门及应用
    Kafka不只是个消息系统
    提高代码质量:如何编写函数
    jquery 回车事件
    程序员的薪资是如何确定出来的?
    HTTP 错误 500.21
    制作手机浏览器显示格式的HTML页面
    操作必须使用一个可更新的查询。
  • 原文地址:https://www.cnblogs.com/xuzeyu/p/9400806.html
Copyright © 2011-2022 走看看