首先新建一个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. Apollo2.1.0+Springboot使用OpenApI

    依赖管理 <!-- bootstrap最高级启动配置读取 --> <dependency> <groupId>org.springframework.cloud&l ...

  2. poj2279

    Mr. Young's Picture Permutations Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5841   ...

  3. Newstar CTF 2023

    WEEK1 PWN 1.ezshellcode 直接sendline(shellcode)即可 exp: from pwn import * p = remote("node4.buuoj. ...

  4. YbtOJ 做题记录-总集版

    感觉每章都开一篇博客过于占据版面 (以及写不动题了想摸一会鱼 于是就有了您现在看到的这篇博客. upd:不知道啥时候咕了.懒得补,那就继续咕着吧(bushi 基础算法 第1章 递推算法 第2章 贪心算 ...

  5. Python 继承和子类示例:从 Person 到 Student 的演示

    继承允许我们定义一个类,该类继承另一个类的所有方法和属性.父类是被继承的类,也叫做基类.子类是从另一个类继承的类,也叫做派生类. 创建一个父类 任何类都可以成为父类,因此语法与创建任何其他类相同: 示 ...

  6. QT(7)-初识委托

    @ 目录 1 简介 2 QT中的委托类 2.1 函数 2.1.1 关键函数 2.1.2 其他函数 3 例子 3.1 官方例子 3.2 修改官方例子 4 设想 1 简介 委托是Qt中的一种机制,用于在Q ...

  7. [C++]线段树 区间查询 单点修改

    线段树 区间查询 单点修改 算法思想 这个算法是用于数组的查询和修改 可以高效的进行查询修改 但是会增加内存的使用 本质上是一种 空间换时间 的算法 这个算法把一串数组无限二分 直到分的只剩下一个数据 ...

  8. JAVA类的加载(2) ——按需加载(延迟加载)

    1.例1: 1 /* 2 按需加载:当你不去实例化Cat时,Cat相关类都不会被加载,即按需加载(需要时加载) 3 1.先加载父类 4 2.初始化类 5 3.类只加载一次(暂且这么认为)--缓存 6 ...

  9. PIR传感器选型及其使用介绍

    (一)PIR简介 PIR传感器(Passive Infrared Sensor),即被动式红外传感器.它因为功耗低,价格低廉,使用简单从而被大量使用在门铃.猫眼.感应开关.小夜灯.安防等消费类产品上. ...

  10. Vue3设计思想及响应式源码剖析

    一.Vue3结构分析 1.Vue2与Vue3的对比 对TypeScript支持不友好(所有属性都放在了this对象上,难以推倒组件的数据类型) 大量的API挂载在Vue对象的原型上,难以实现TreeS ...