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

在NuGet包中添加Microsoft.AspNetCore.StaticFiles

添加好以后我们在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:\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!");
});
}

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

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

在里面写入.net core

然后程序运行起来访问我们的文件可以看见 成功浏览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:\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();

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

我们在换成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!");
});
}

可以看到,我们可以访问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();
}
}

手机访问效果图如上

.net Core实战简单文件服务器的更多相关文章

  1. 基于 .NET Core 的简单文件服务器

    Netnr.FileServer 基于 .NET Core 的简单文件服务器,数据库为SQLite 源码 https://github.com/netnr/blog https://gitee.com ...

  2. net core 实战之 redis 负载均衡和"高可用"实现

    net core 实战之 redis 负载均衡和"高可用"实现 1.概述 分布式系统缓存已经变得不可或缺,本文主要阐述如何实现redis主从复制集群的负载均衡,以及 redis的& ...

  3. ASP.NET Core 实战:使用 Docker 容器化部署 ASP.NET Core + MySQL + Nginx

    一.前言 在之前的文章(ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路)中,我介绍了如何在 Linux 环境中安装 .NET Core SDK / .NET Core ...

  4. ASP.NET Core 实战:基于 Jwt Token 的权限控制全揭露

    一.前言 在涉及到后端项目的开发中,如何实现对于用户权限的管控是需要我们首先考虑的,在实际开发过程中,我们可能会运用一些已经成熟的解决方案帮助我们实现这一功能,而在 Grapefruit.VuCore ...

  5. .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9977862.html 写在前面 千呼万唤始出来,首先,请允许我长吸一口气!真没想到一份来自28岁老程序员 ...

  6. .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了

    作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9985451.html 本来这篇只是想简单介绍下ASP.NET Core MVC项目的(毕竟要照顾到很多新 ...

  7. .NET Core实战项目之CMS 第三章 入门篇-源码解析配置文件及依赖注入

    作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9998021.html 写在前面 上篇文章我给大家讲解了ASP.NET Core的概念及为什么使用它,接着 ...

  8. .NET Core实战项目之CMS 第四章 入门篇-Git的快速入门及实战演练

    写在前面 上篇文章我带着大家通过分析了一遍ASP.NET Core的源码了解了它的启动过程,然后又带着大家熟悉了一遍配置文件的加载方式,最后引出了依赖注入以及控制反转的概念!如果大家把前面几张都理解了 ...

  9. .NET Core实战项目之CMS 第五章 入门篇-Dapper的快速入门看这篇就够了

    写在前面 上篇文章我们讲了如在在实际项目开发中使用Git来进行代码的版本控制,当然介绍的都是比较常用的功能.今天我再带着大家一起熟悉下一个ORM框架Dapper,实例代码的演示编写完成后我会通过Git ...

  10. .NET Core实战项目之CMS 第六章 入门篇-Vue的快速入门及其使用

    写在前面 上面文章我给大家介绍了Dapper这个ORM框架的简单使用,大伙会用了嘛!本来今天这篇文章是要讲Vue的快速入门的,原因是想在后面的文章中使用Vue进行这个CMS系统的后台管理界面的实现.但 ...

随机推荐

  1. Record - Nov. 27st, 2020 - Exam. REC & SOL

    Problem. 1 Junior - Thinking Desc. & Link. 注意到值域乘范围刚好能过. 然后就存两个桶即可...(数组开小飞了半天才调出来...) Problem. ...

  2. 工作中常用的一些Git骚操作,一般人我不告诉他。

    一.Git提交代码 1 git pull 从服务器上拉取代码 2 git status 查看文件的状态 3 git add . 添加所有文件到暂存区 4 git commit -m "提交的 ...

  3. PostgreSQL学习笔记-1.基础知识:创建、删除数据库和表格

    PostgreSQL 创建数据库 PostgreSQL 创建数据库可以用以下三种方式:1.使用 CREATE DATABASE SQL 语句来创建.2.使用 createdb 命令来创建.3.使用 p ...

  4. 什么是 CSS?

    1.什么是 CSS? CSS 指的是层叠样式表* (Cascading Style Sheets) CSS 描述了如何在屏幕.纸张或其他媒体上显示 HTML 元素 CSS 节省了大量工作.它可以同时控 ...

  5. 如何使用webgl(three.js)实现煤矿隧道、井下人员定位、掘进面、纵采面可视化解决方案——第十九课(一)

    序: 又是很久没有更新文章了,这次索性将之前做的三维煤矿项目拿出来讲讲,一是回顾技术,二是锻炼一下文笔. 随着科技的不断发展,越来越多的人开始关注煤矿采集的安全和效率问题.为了更好地展示煤矿采集的过程 ...

  6. Java 魔法值处理的四种方法

    Java 魔法值处理方案 魔法值的定义 方法一 静态常量(不推荐) 方法二 接口中定义 方法三 定义在实体类 方法四 使用枚举类 enum 总结 魔法值的定义 魔法值是Java中突兀出现在代码中的常量 ...

  7. HDU4841 AHOI1999 圆桌问题 题解

    朴素的约瑟夫问题,用vector处理即可 #include <iostream> #include <vector> using namespace std; //AHOI19 ...

  8. UVA10702 Travelling Salesman 题解

     UVA10702 Travelling Salesman 题解 题面: 有个旅行的商人,他每到一个的新城市,便卖掉所有东西再购买新东西,从而获得利润.从某城市 A 到某城市 B 有固定利润(B 到 ...

  9. 在 kubernetes 环境中实现 gRPC 负载均衡

    前言 前段时间写过一篇 gRPC 的入门文章,在最后还留了一个坑没有填: 也就是 gRPC 的负载均衡问题,因为当时的业务请求量不算大,再加上公司没有对 Istio 这类服务网格比较熟悉的大牛,所以我 ...

  10. Chromium Mojo通信

    Mojo 是一个跨平台 IPC 框架,它诞生于 chromium ,用来实现 chromium 进程内/进程间的通信.目前,它也被用于 ChromeOS. 在我们代码应用中,如何使用Mojo来作进程间 ...