惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
Stack Overflow Blog
Stack Overflow Blog
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
T
The Blog of Author Tim Ferriss
博客园 - 叶小钗
N
Netflix TechBlog - Medium
腾讯CDC
C
Check Point Blog
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
S
SegmentFault 最新的问题
F
Fortinet All Blogs
美团技术团队
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 司徒正美
F
Full Disclosure
Recorded Future
Recorded Future
D
DataBreaches.Net
博客园 - 【当耐特】
Martin Fowler
Martin Fowler
J
Java Code Geeks
I
InfoQ
Y
Y Combinator Blog
A
About on SuperTechFans
AI
AI
爱范儿
爱范儿
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Forbes - Security
Forbes - Security
W
WeLiveSecurity
M
MIT News - Artificial intelligence
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
Schneier on Security
Schneier on Security
The GitHub Blog
The GitHub Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
aimingoo的专栏
aimingoo的专栏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
GRAHAM CLULEY
Know Your Adversary
Know Your Adversary
Latest news
Latest news
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
D
Docker
Recent Commits to openclaw:main
Recent Commits to openclaw:main
量子位
V2EX - 技术
V2EX - 技术
Project Zero
Project Zero

Firgt's Blog

分享一个自用车载歌单,就是风格比较… – Firgt's Blog 使用CloudflareCDN的网站被劫持的经验教训 – Firgt's Blog 使用CloudflareCDN却不幸遭到域名劫持,跳转到恶意网站,如何解决? – Firgt's Blog 【25.1.21-26.1.21】我在萌社区一周年总结 – Firgt's Blog 【AI】WindowsPhone的失败 – Firgt's Blog 分享资源盘(不定期上传一些新东西) – Firgt's Blog 【AI】LittlePan_v2:轻量高效的现代外链网盘管理系统,让文件管理更简单✨ – Firgt's Blog Firgt资源盘API说明文档 – Firgt's Blog 利用向量点积为零的条件和距离相等条件,建立方程求解 – Firgt's Blog
【AI】LittlePan:一款轻量可靠的自建外链网盘系统,从开发到落地的全解析 – Firgt's Blog
Firgt Zhong · 2025-08-02 · via Firgt's Blog

本文自发布时间距今已有 315 天,其中的信息可能已经有所发展或是发生改变。 本文最后更新于 103 天前。如有错误欢迎指正!

在如今的云存储时代,无论是个人开发者需要图床服务,还是小团队需要简易文件共享工具,一款可控、轻量、安全的自建网盘系统都显得尤为重要。基于此,我在开源项目Oneui_Pan的基础上二次开发了LittlePan——一款专注于外链管理的轻量网盘系统。本文将从功能细节、技术实现、安装配置到实际应用场景,全方位解析这款工具的设计与落地。

最初接触Oneui_Pan时,其"轻量PHP架构+简单部署"的特点吸引了我,但实际使用中发现了不少影响体验的问题:

  • API功能缺失,无法实现自动化上传(比如与Markdown编辑器集成);
  • 存在文件权限校验漏洞,可能导致未授权访问;
  • 存储引擎单一,仅支持本地存储,扩展性差;
  • 前端交互简陋,缺乏上传进度反馈、文件预览等基础功能。

作为经常需要分享文件和搭建个人图床的开发者,这些问题直接影响了使用效率。因此,我决定在原项目基础上进行二次开发,最终形成了LittlePan——保留轻量特性的同时,补足了功能短板,强化了安全性。

二、核心功能:从用户体验到开发者友好

LittlePan的核心设计理念是"够用、稳定、易扩展",主要功能可分为用户端基础功能开发者API能力两部分。

1. 用户端:简单直观的文件管理体验

(1)便捷的文件上传与管理

  • 多场景上传:支持网页端拖拽上传、点击选择文件,单文件限制50MB(可自定义),总存储5GB(适合个人/小团队);
  • 权限控制:可给文件设置访问密码,防止敏感内容泄露;
  • 文件追踪:通过"我的文件"页面(myfile.php)查看历史上传记录(基于浏览器缓存),支持分页浏览:
    // myfile.php 中分页逻辑核心代码
    $pagesize = 15; // 每页15条记录
    $pages = ceil($numrows / $pagesize);
    $page = isset($_GET['page']) ? intval($_GET['page']) : 1;
    $offset = $pagesize * ($page - 1);
    $rs = $DB->query("SELECT * FROM pre_file WHERE id IN($ids) ORDER BY id DESC LIMIT $offset, $pagesize");
    

(2)丰富的文件交互能力

  • 在线预览:支持图片、音频、视频等常见格式在线预览(view.php实现),无需下载即可查看内容;
  • 多链接生成:每个文件自动生成"查看链接"和"下载链接"(file.php),方便不同场景使用:
    // file.php 中链接生成逻辑
    $viewurl_all = $siteurl . 'view.php/' . $row['hash'] . '.' . $row['type'];
    $downurl_all = $siteurl . 'down.php/' . $row['hash'] . '.' . $row['type'];
    
  • 二维码分享:生成文件访问二维码,支持移动端快速访问。

(3)视觉与交互优化

  • 动态背景:主页使用必应每日壁纸作为背景(index.php中通过//dailybing.com/api/v1接口获取),提升视觉体验;
  • 上传进度反馈:通过upload.js实现实时进度条和速度显示,避免用户等待焦虑:
    // upload.js 中进度条更新逻辑
    xhr.upload.onprogress = function(evt) {
      var loaded = evt.loaded;
      var total = evt.total;
      var percent = Math.floor(loaded / total * 100);
      $('.progress-bar').css('width', percent + '%');
      $('#percentage').text(percent + '%');
    };
    

2. 开发者端:完善的API与扩展能力

LittlePan的一大亮点是重构了API系统,让开发者可以轻松集成文件存储能力到自己的应用中。

(1)API核心功能

  • 文件上传:支持通过POST请求上传文件,返回文件哈希和访问链接;
  • 文件删除:同IP上传的文件可直接删除,带密码的文件需验证密码后删除;
  • 跨域支持:通过CORS响应头配置,允许前端跨域调用(api.php中设置Access-Control-Allow-Origin: *);

API调用示例(上传文件)

curl -X POST "https://你的域名/api.php" \
  -F "file=@/path/to/your/file.jpg" \
  -F "ispwd=0"  # 0表示不设密码,1表示需要密码

返回结果:

{
  "code": 0,
  "msg": "上传成功",
  "hash": "a1b2c3d4e5f6",
  "downurl": "https://你的域名/down.php/a1b2c3d4e5f6.jpg"
}

(2)多存储引擎支持

LittlePan设计了灵活的存储接口,支持多种存储方式(本地、阿里云OSS、华为云OBS等),可在后台一键切换(includes/common.php):

// 存储引擎初始化逻辑
switch($conf['storage']){
  case 'local':$stor=new \lib\Storage\Local($conf['filepath']);break;
  case 'oss':$stor=new \lib\Storage\Oss($conf['oss_ak'], $conf['oss_sk'], $conf['oss_endpoint'], $conf['oss_bucket']);break;
  case 'obs':$stor=new \lib\Storage\Obs($conf['obs_ak'], $conf['obs_sk'], $conf['obs_endpoint'], $conf['obs_bucket']);break;
  // 其他存储引擎...
}

3. 安全性:从输入到存储的全链路防护

针对原项目的安全漏洞,LittlePan做了多重加固:

  • 输入过滤:所有用户输入通过htmlspecialchars处理,防止XSS攻击;
  • CSRF防护:关键操作(如上传、删除)添加csrf_token验证(upload.js中携带token);
  • 文件验证:通过白名单限制可上传文件类型,防止恶意脚本上传;
  • 权限校验:删除文件时验证IP或密码,避免未授权操作(api.php中删除逻辑):
    // API删除文件的权限校验
    if(!empty($file['pwd']) && $delete_data['file_pwd'] !== $file['pwd']){
      showresult(['code'=>-1, 'msg'=>'密码错误']);
    }
    

三、技术架构:轻量背后的设计思路

LittlePan采用"PHP+MySQL+多存储引擎"的架构,整体设计遵循"简单可依赖"原则,核心模块包括:

  1. 前端层:基于Bootstrap和OneUI组件库,实现响应式布局,适配PC和移动端;
  2. 业务层:核心逻辑集中在api.php(API处理)、upload.php(上传)、down.php(下载)等文件,通过includes/common.php加载公共配置;
  3. 数据层:MySQL存储文件元信息(哈希、大小、上传时间等),实际文件存储由各引擎处理;
  4. 扩展层:通过存储接口(lib/Storage/目录下的类)实现多存储支持,方便扩展新的存储方式。

这种架构的优势在于:

  • 轻量:无复杂依赖,PHP环境即可运行;
  • 灵活:存储引擎可按需切换,适应不同场景;
  • 易维护:核心逻辑与扩展功能分离,代码结构清晰。

四、安装与配置:3分钟搭建个人网盘

LittlePan的安装过程极为简单,无需复杂依赖,适合新手操作:

  1. 下载与部署
    Releases页面下载最新版本,解压到网站根目录(如Nginx/Apache的www目录)。

  2. 自动安装
    访问网站域名,自动跳转至安装界面(install/index.php),按提示填写MySQL数据库信息(主机、用户名、密码、数据库名),完成后系统会自动创建数据表并生成配置文件。

  3. 基础配置

    • 登录管理员后台(admin/index.php),可查看文件统计、服务器信息(PHP版本、MySQL版本等);
    • 自定义网盘说明:修改about.php文件,添加网站介绍、使用规则等内容;
    • 切换存储引擎:在后台配置对应存储的密钥(如OSS的AK/SK),保存后自动生效。
  4. 验证安装
    上传一个测试文件,检查是否能正常生成外链、在线预览,API是否可调用(可通过Postman测试)。

五、实际应用场景:从小团队到个人开发者

LittlePan的轻量特性使其适用于多种场景:

  1. 个人图床
    配合Markdown编辑器(如Typora),通过API实现图片自动上传,生成的外链可直接插入文章,避免第三方图床"跑路"风险。

  2. 小团队文件共享
    团队成员可上传会议资料、设计稿等,通过密码保护敏感文件,管理员在后台可查看上传统计,控制总存储用量。

  3. 临时文件传输
    无需注册,上传后生成短期有效的外链,适合给客户发送临时文件(可手动删除过期文件)。

  4. 开发测试工具
    作为轻量存储服务集成到其他项目,比如小程序的图片存储、APP的日志上传等,API文档详见官方指南

六、开发历程与未来规划

LittlePan的迭代始终围绕"解决实际问题":

  • 2025.7.20:开通基础API功能,支持文件上传;
  • 2025.7.21:添加CORS支持,完善API文档;
  • 2025.7.22:新增API删除功能,强化权限控制;
  • 2025.7.23:优化主页UI,使用必应壁纸提升体验。

未来计划包括:

  • 实现文件过期自动清理,释放存储空间;
  • 增加用户注册系统,支持多用户隔离;

七、如何获取与参与

LittlePan已开源(MIT协议),欢迎体验和贡献代码:

如果你正在寻找一款"够用、稳定、可自建"的外链网盘工具,LittlePan或许是个不错的选择。轻量不代表简陋,简单背后是对核心需求的专注——让文件管理回归本质,无需复杂配置即可上手使用。

本文作者:FirgtZhong
本文标题:【AI】LittlePan:一款轻量可靠的自建外链网盘系统,从开发到落地的全解析
本文链接:https://blog.firgt.cn/2025/08/02/littlepan/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可