局域网文件分享
基于 Node.js + Express 的局域网文件分享服务器,支持多文件夹配置、文件浏览下载、在线预览与短链接分享
项目概述
局域网内快速文件分享,无需额外客户端。支持通过配置文件自定义多个分享文件夹,提供文件浏览、下载、在线预览和短链接复制功能。
| 项目属性 | 内容 |
|---|---|
| 项目名称 | LAN-File-Share |
| 项目类型 | Node.js Web 服务器 |
| 运行时 | Node.js 20+ |
| 前端 | 原生 HTML / CSS / JavaScript |
| 开源协议 | MIT |
功能一览
| 功能 | 说明 |
|---|---|
| 多文件夹分享 | 通过 config.json 配置多个分享文件夹,前端可动态切换 |
| 文件浏览 | 支持子目录导航、面包屑路径 |
| 文件下载 | 支持传统 API 和短链接两种下载方式 |
| 在线预览 | 支持图片和 PDF 文件在浏览器中直接预览 |
| 文件类型识别 | SVG 图标区分类别(图片 / 视频 / 音频 / 文档 / 代码 / 压缩包) |
| 响应式设计 | 适配桌面端和移动端 |
| 复制下载链接 | 一键复制文件下载链接 |
| 启动信息展示 | 服务器启动时自动打印局域网 IP 地址 |
安全提醒
服务器默认监听 0.0.0.0,局域网内所有设备均可访问。请勿分享系统敏感文件夹,并确保防火墙已正确配置。
快速开始
环境要求
| 依赖 | 版本要求 |
|---|---|
| Node.js | >= 20.0.0 |
| npm | >= 10.0.0 |
安装与启动
# 1. 克隆或下载项目后,安装依赖
npm install
# 2. 启动服务器
npm start或双击 Windows 批处理脚本:
# start.bat 内容
node server.js启动成功后终端会打印访问地址:
╔════════════════════════════════════════════════════════╗
║ 局域网文件分享服务器已启动 ║
╠════════════════════════════════════════════════════════╣
║ 本地访问:http://localhost:8080 ║
║ 局域网访问: ║
║ ├─ http://192.168.1.100:8080 (以太网) ║
║ └─ http://192.168.1.101:8080 (Wi-Fi) ║
║ 分享文件夹数量:1 ║
╚════════════════════════════════════════════════════════╝配置文件
编辑项目根目录的 config.json 进行配置。
完整配置项
{
"port": 8080,
"host": "0.0.0.0",
"sharedFolders": [
{
"name": "默认分享",
"path": "D:/desktop/shair",
"description": "默认共享文件夹"
}
],
"allowDownload": true,
"allowUpload": false,
"maxFileSize": 10737418240
}配置项说明
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
port | number | 8080 | 服务器监听端口 |
host | string | "0.0.0.0" | 监听地址,0.0.0.0 表示监听所有网卡 |
sharedFolders | array | — | 分享文件夹列表 |
sharedFolders[].name | string | — | 文件夹在前端的显示名称 |
sharedFolders[].path | string | — | 文件夹绝对路径或相对路径(相对于项目根目录) |
sharedFolders[].description | string | — | 文件夹描述文字 |
allowDownload | boolean | true | 是否允许文件下载 |
allowUpload | boolean | false | 是否允许文件上传(预留) |
maxFileSize | number | 10737418240 | 单文件最大字节数,默认 10 GB |
多文件夹配置示例
{
"port": 8080,
"host": "0.0.0.0",
"sharedFolders": [
{
"name": "文档资料",
"path": "D:\\Documents",
"description": "工作文档和资料"
},
{
"name": "媒体文件",
"path": "E:\\Media",
"description": "图片和视频文件"
},
{
"name": "软件工具",
"path": "./tools",
"description": "常用软件和工具"
}
],
"allowDownload": true,
"allowUpload": false,
"maxFileSize": 10737418240
}提示
path 支持绝对路径和相对路径。相对路径以项目根目录为基准。
项目结构
sharepythodev/
├── config.json # 配置文件(端口、分享文件夹等)
├── server.js # 服务器主程序
├── package.json # 项目依赖配置
├── start.bat # Windows 一键启动脚本
├── public/
│ └── index.html # 前端页面(单文件含 CSS + JS)
├── README.md # 项目说明(面向用户)
├── LICENSE # MIT 许可证
└── .gitignore # Git 忽略规则服务端核心函数
server.js 中定义的主要函数:
| 函数 | 行号 | 用途 |
|---|---|---|
getAllIPs() | L13 | 获取本机所有 IPv4 网卡地址 |
formatFileSize(bytes) | L32 | 字节数转换为可读文件大小(B / KB / MB / GB) |
formatDateTime(date) | L40 | 日期格式化为中文toLocaleString |
getFileList(folderPath, relativePath) | L45 | 获取文件夹内的文件和子目录列表,跳过隐藏文件 |
resolveFile(folderIndex, filePath) | L119 | 解析文件路径并验证安全权限 |
前端核心函数
public/index.html 中定义的主要函数:
| 函数 | 行号 | 用途 |
|---|---|---|
getFileIcon(mimeType, fileName) | L678 | 根据 MIME 类型和扩展名返回对应 SVG 图标 |
loadFolders() | L694 | 请求并渲染分享文件夹选择列表 |
selectFolder(index) | L738 | 切换分享文件夹 |
loadFiles(folderIndex, path) | L832 | 请求文件列表并渲染 |
renderBreadcrumb(currentPath) | L859 | 渲染面包屑导航 |
renderFileList(data) | L884 | 渲染文件 / 文件夹列表 |
navigateUp() | L968 | 返回上级目录 |
copyFileLink(event) | L778 | 复制下载链接到剪贴板 |
showToast(message, type) | L759 | 弹出提示消息 |
API 接口
获取分享文件夹列表
GET /api/folders响应示例:
[
{
"name": "默认分享",
"path": "D:/desktop/shair",
"description": "默认共享文件夹"
}
]获取文件列表
GET /api/files?folderIndex=0&path=| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
folderIndex | number | 否 | 文件夹索引,默认 0 |
path | string | 否 | 子目录相对路径,空表示根目录 |
响应示例:
{
"folderName": "默认分享",
"folderDescription": "默认共享文件夹",
"folderIndex": 0,
"currentPath": "",
"folders": [
{
"name": "子文件夹",
"path": "\\子文件夹",
"modified": "2026/5/4 12:00:00"
}
],
"files": [
{
"name": "示例文件.txt",
"path": "\\示例文件.txt",
"size": "1.5 KB",
"sizeBytes": 1536,
"modified": "2026/5/4 10:00:00",
"type": "text/plain"
}
]
}下载文件
短链接方式(推荐):
GET /d/{folderIndex}/{filePath}传统 API 方式:
GET /api/download?folderIndex=0&path=/文件.txt推荐使用短链接
短链接更简洁,适合分享和复制。路径会自动处理 URL 编码,支持中文和空格。
示例:http://192.168.1.100:8080/d/0/文档/报告.pdf
预览文件
短链接方式(推荐):
GET /p/{folderIndex}/{filePath}传统 API 方式:
GET /api/preview?folderIndex=0&path=/图片.jpg安全机制
| 安全措施 | 实现位置 | 说明 |
|---|---|---|
| 路径穿越防护 | server.js#L127 | 验证解析后的路径必须在配置的分享文件夹范围内,否则返回 403 |
| 隐藏文件过滤 | server.js#L57 | 自动跳过以 . 开头的隐藏文件 |
| 文件大小限制 | server.js#L140 | 超过 maxFileSize 的文件拒绝下载 |
| 下载开关 | server.js#L154 | allowDownload: false 可全局禁用下载 |
| 文件类型校验 | server.js#L137 | 目录不可作为文件下载 |
常见问题
Q:如何修改端口?
编辑 config.json 文件,修改 port 字段即可。
Q:为什么局域网其他设备无法访问?
检查防火墙设置,确保对应端口已开放。可尝试在 Windows 防火墙中添加入站规则允许 Node.js 通过。
Q:如何分享其他文件夹?
编辑 config.json 文件,在 sharedFolders 数组中添加新的文件夹配置,重启服务即可。
Q:支持文件上传吗?
当前版本仅支持文件下载和预览,上传功能在规划中。配置项 allowUpload 为预留字段,暂未实现。
Q:如何让服务开机自启动?
可将 start.bat 的快捷方式放入 Windows 启动文件夹(shell:startup),或使用 pm2、nssm 等工具注册为 Windows 服务。
技术栈
| 层级 | 技术 | 说明 |
|---|---|---|
| 运行时 | Node.js 20+ | Windows 11 环境 |
| Web 框架 | Express 4.x | 轻量级 HTTP 服务器 |
| 前端 | 原生 HTML / CSS / JS | 单文件 SPA,零构建依赖 |
| MIME 识别 | mime-types | 文件类型识别与 Content-Type 设置 |
| 配置管理 | config.json | JSON 静态配置文件 |
Last updated on