heikeson Logo柯索星澜

局域网文件分享

基于 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
}

配置项说明

配置项类型默认值说明
portnumber8080服务器监听端口
hoststring"0.0.0.0"监听地址,0.0.0.0 表示监听所有网卡
sharedFoldersarray分享文件夹列表
sharedFolders[].namestring文件夹在前端的显示名称
sharedFolders[].pathstring文件夹绝对路径或相对路径(相对于项目根目录)
sharedFolders[].descriptionstring文件夹描述文字
allowDownloadbooleantrue是否允许文件下载
allowUploadbooleanfalse是否允许文件上传(预留)
maxFileSizenumber10737418240单文件最大字节数,默认 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=
参数类型必填说明
folderIndexnumber文件夹索引,默认 0
pathstring子目录相对路径,空表示根目录

响应示例:

{
  "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#L154allowDownload: false 可全局禁用下载
文件类型校验server.js#L137目录不可作为文件下载

常见问题

Q:如何修改端口?

编辑 config.json 文件,修改 port 字段即可。

Q:为什么局域网其他设备无法访问?

检查防火墙设置,确保对应端口已开放。可尝试在 Windows 防火墙中添加入站规则允许 Node.js 通过。

Q:如何分享其他文件夹?

编辑 config.json 文件,在 sharedFolders 数组中添加新的文件夹配置,重启服务即可。

Q:支持文件上传吗?

当前版本仅支持文件下载和预览,上传功能在规划中。配置项 allowUpload 为预留字段,暂未实现。

Q:如何让服务开机自启动?

可将 start.bat 的快捷方式放入 Windows 启动文件夹(shell:startup),或使用 pm2nssm 等工具注册为 Windows 服务。


技术栈

层级技术说明
运行时Node.js 20+Windows 11 环境
Web 框架Express 4.x轻量级 HTTP 服务器
前端原生 HTML / CSS / JS单文件 SPA,零构建依赖
MIME 识别mime-types文件类型识别与 Content-Type 设置
配置管理config.jsonJSON 静态配置文件

Last updated on

On this page