# HttpFileServer **Repository Path**: AITechInfo/HttpFileServer ## Basic Information - **Project Name**: HttpFileServer - **Description**: http文件服务器 可用于局域网内目录浏览和文件下载、上传 http server for browse directory and download / upload files 支持将目录信息响应为json格式(发起HTTP请求时将Header中的Accept设置为application/json) - **Primary Language**: C# - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2025-02-17 - **Last Updated**: 2026-05-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HttpFileServer 该项目Fork自[HttpFileServer v1.6](https://github.com/scanfing/HttpFileServer.git) 基于 .NET 的 HTTP 文件服务器,支持目录浏览、文件下载/上传、用户认证、虚拟目录、HTTPS、多主题等特性。提供 WPF 桌面管理界面和自包含的 Web 前端 UI。 ![WPF 桌面管理界面](images/ShellFileShare.png) ## 项目结构 ``` src/ ├── HttpFileServer.sln # 解决方案 ├── HttpFileServer.Core/ # 核心功能类库(多框架) │ ├── Core/ # 配置、用户、虚拟目录等数据模型 │ ├── Handlers/ # HTTP 请求处理器(GET/POST/HEAD) │ ├── Servers/ # 服务器引擎(HttpListener 实现) │ ├── Services/ # 认证、缓存、配置、文件监控等服务 │ ├── Utils/ # HTML 生成、证书、防火墙、IP 等工具 │ ├── Web/ # 上传文件解析(multipart/form-data) │ ├── Models/ # 请求日志、网卡等模型 │ ├── Infrastructure/ # MVVM 基础设施(BindableBase、命令等) │ └── Resources/ # HTML/CSS/JS 前端资源 │ └── HttpFileServer.Demo/ # WPF 桌面应用程序 ├── Views/ # WPF 窗口 ├── ViewModels/ # 主视图模型 ├── Controls/ # 自定义控件 ├── Converters/ # 值转换器 ├── Infrastructure/ # ViewModelBase └── Resources/ # 嵌入的 DLL 资源 ``` ## 目标框架 | 项目 | 目标框架 | |------|---------| | `HttpFileServer.Core` | `net45` / `net472` / `net8.0` | | `HttpFileServer.Demo` | `net472` / `net8.0-windows` | ## 构建 ```bash # 构建 .NET 8 WPF 版本 dotnet build src/HttpFileServer.Demo -f net8.0-windows # 构建 .NET Framework 4.7.2 版本(需 Visual Studio MSBuild) msbuild src/HttpFileServer.Demo /p:TargetFramework=net472 # 发布单文件 dotnet publish src/HttpFileServer.Demo -f net8.0-windows -c Release --self-contained -p:PublishSingleFile=true ``` ## 快速开始 1. **启动程序**:运行 `HttpFileServer.Demo`,主窗口提供完整配置界面 2. **配置端口**:默认 HTTP 80,可配置 HTTPS 端口 3. **选择目录**:选择要共享的根目录 4. **启动服务**:点击"启动"按钮,浏览器访问 `http://localhost:端口/` 5. **用户认证**:内置用户 `admin` / `admin123`,`user` / `user123` ## 功能特性 ### 核心功能 | 功能 | 说明 | |------|------| | **目录浏览** | 文件列表展示名称/大小/修改日期/类型,支持排序 | | **文件下载** | 直接下载,支持大文件流式传输和断点续传(Range) | | **文件上传** | 拖拽上传,并发队列(默认 3 个并发),进度显示 | | **虚拟目录** | 将多个物理目录映射到不同 URL 路径 | | **用户认证** | Cookie 会话认证,支持"记住我" | | **权限控制** | 按用户 + 按虚拟目录的访问控制,独立上传权限 | | **HTTPS** | 自动生成自签名证书并绑定端口 | | **热更新** | 修改配置后立即生效,无需重启服务 | ### Web 前端 UI | 功能 | 说明 | |------|------| | **主题系统** | Light / Dark / 跟随系统,持久化到 localStorage | | **文件预览** | 图片预览(png/jpg/gif/bmp/webp/svg),文本预览(txt/md/html/js/css/json/log/xml/bat 等),支持上下翻页 | | **悬停预览** | 鼠标悬停 600ms 后显示预览浮层 | | **分享** | 二维码生成,链接分享 | | **文件类型图标** | 按扩展名显示不同颜色的 SVG 图标(50+ 种类型) | | **站点品牌** | 自定义站点名称、Logo(Base64 嵌入)、Favicon | | **虚拟目录导航** | 按钮式导航栏,高亮当前目录 | | **上传界面** | 文件拖拽区域,文件列表,实时进度 | ### 服务器特性 | 特性 | 说明 | |------|------| | **缓存** | 内存缓存,单文件最大 100MB,总池 4GB,LRU 淘汰 | | **缓存隔离** | 不同用户独立缓存键,登录/登出自动销毁用户缓存 | | **文件监控** | `FileSystemWatcher` 监控目录变更,自动失效缓存 | | **并发控制** | 文件访问并发限制(默认 32) | | **防火墙** | 自动添加 Windows 防火墙例外(.NET Framework) | | **自启动** | 注册表 `Run` 项管理开机自启 | ## 配置 配置文件 `HttpFileServer.Demo.json` 自动生成在可执行文件同目录下,支持以下配置项: ```json { "Port": 80, // HTTP 端口 "EnableHttps": false, // 启用 HTTPS "HttpsPort": 443, // HTTPS 端口 "RootDir": "C:\\Users\\...", // 共享根目录 "EnableUpload": true, // 启用上传 "UseWebServer": false, // 静态 Web 服务器模式 "ThemeMode": "System", // 主题: Light / Dark / System "SiteName": "HttpFileServer", // 站点名称 "SiteLogoPath": "", // Logo 图片路径 "FaviconPath": "", // Favicon 图标路径 "VirtualDirectories": [ // 虚拟目录 { "Name": "docs", "PhysicalPath": "D:\\Documents", "AllowUpload": false } ], "Users": [ // 用户账户 { "Username": "admin", "Password": "admin123", "CanUpload": true, "AllowedVirtualDirs": ["docs"] }, { "Username": "user", "Password": "user123", "CanUpload": false } ], "PreviewImageExtensions": ["png","jpg","jpeg","gif","bmp","webp","svg"], "PreviewTextExtensions": ["txt","md","html","js","css","json","log","xml","bat"] } ``` > `AutoStartOnLaunch`、`AutoStartWithSystem`、`MinimizeToTrayAfterAutoStart` 三个自启动选项仅在 WPF 界面中设置。 ## 用户与权限 ### 用户模型 ```json { "Username": "admin", "Password": "admin123", "CanUpload": true, "AllowedVirtualDirs": ["docs", "images"] } ``` - `AllowedVirtualDirs` 为空或 `null`:可访问所有虚拟目录 - `AllowedVirtualDirs` 为空列表 `[]`:不可访问任何虚拟目录 - `CanUpload`:是否允许上传文件 ### 默认用户 | 用户名 | 密码 | 上传权限 | 虚拟目录 | |--------|------|---------|---------| | `admin` | `admin123` | 允许 | 所有 | | `user` | `user123` | 允许 | 所有 | ## 虚拟目录 将不同物理路径映射为 URL 路径段的虚拟文件夹。配置示例: ```json { "Name": "documents", "PhysicalPath": "D:\\Shared\\Docs", "Description": "共享文档", "AllowUpload": true } ``` 当配置虚拟目录后: - 首页同时展示 **根目录内容** + **虚拟目录列表** - 每种用户可以配置对不同虚拟目录的访问权限 - 每个虚拟目录可以独立控制是否允许上传 ## 服务器模式 ### 文件服务器模式(默认) - `UseWebServer: false` - 文件下载时设置 `Content-Disposition` 触发浏览器下载 - 目录浏览显示文件列表 ### 静态 Web 服务器模式 - `UseWebServer: true` - 返回真实 MIME 类型,不触发下载 - 优先从目录加载 `index.html` - 适合部署静态网站 ## HTTPS 1. 在 WPF 界面中勾选"启用 HTTPS" 2. 设置 HTTPS 端口(默认 443) 3. 启动服务后自动生成自签名证书并绑定 4. 需要管理员权限执行 `netsh http add sslcert` ## API 接口 | 路由 | 方法 | 说明 | |------|------|------| | `/` | GET | 目录浏览首页 | | `/api/me` | GET | 获取当前登录状态 `{ authenticated, username, canUpload }` | | `/api/login` | POST | 用户登录 `{ username, password, rememberMe }` → `{ ok, username }` | | `/api/logout` | POST | 用户登出 | | `/?type=resource` | GET | 加载静态资源(JS/CSS) | | 任意文件路径 | GET | 文件下载/目录浏览 | | 任意文件路径 | POST | 文件上传(multipart/form-data) | ## 授权协议 MIT License ``` Copyright (c) 2023-2025 scanfing Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files... ```