前言:本案例适合入门来看。
首先,新建一个ASP.NET Core项目,项目名称:StaticFilesServer 选择空的模板,如下图:
使用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
程序运行起来访问http://localhost:7335/a01.jpg 如下图
如果不想使用默认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/ 后,如下图所示
这样我们就可以浏览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<Startup>()
.Build();
}
这样就可以在同一个局域网内,在手机上使用浏览器访问电脑C盘中的文件了。