.net Core實戰簡單文件服務器

  首先新建一個ASP.NET Core 項目,選中空的模板,以下圖所示瀏覽器

image.png

在NuGet包中添加Microsoft.AspNetCore.StaticFilesapp

image.png

添加好之後咱們在Startup.cs中添加對應的中間件(若是不明白中間件是什麼查看上一篇)async

 

默認文件夾是wwwroot 若是不想使用wwwroot須要使用StaticFileOptions來設置目錄。ide

這裏設置一下目錄到項目根目錄ui

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)      
{
            loggerFactory.AddConsole();
            var staticfile = new StaticFileOptions();
            staticfile.FileProvider = new PhysicalFileProvider(@"F:\xm\core\XzyFilesServer\XzyFilesServer\bin\Debug\netcoreapp1.1\");
            app.UseStaticFiles(staticfile);//使用默認文件夾wwwroot
            if(env.IsDevelopment())
            {           
                app.UseDeveloperExceptionPage();
            }   
            app.Run(async (context) =>{
                await context.Response.WriteAsync("HelloWorld!");
            });
}

這裏咱們設置到項目根目錄this

而後在根目錄建立一個readme.txt文件 spa

image.png

在裏面寫入.net core.net

image.png

而後程序運行起來訪問咱們的文件能夠看見 成功瀏覽readme.txt文件code

若是咱們須要瀏覽全部的文件夾及文件,就須要用到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:\xm\core\XzyFilesServer\XzyFilesServer\bin\Debug\netcoreapp1.1\");
            app.UseDirectoryBrowser(dir);
            var staticfile = new StaticFileOptions();
            //制定目錄也能夠指定其餘文件夾
            staticfile.FileProvider = new PhysicalFileProvider(@"F:\xm\core\XzyFilesServer\XzyFilesServer\bin\Debug\netcoreapp1.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:\xm\core\XzyFilesServer\XzyFilesServer\bin\Debug\netcoreapp1.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

手機訪問效果圖如上

相關文章
相關標籤/搜索