LittlePan:一款轻量可靠的自建外链网盘系统,从开发到落地的全解析

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

一、项目背景:为什么需要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
本文标题:LittlePan:一款轻量可靠的自建外链网盘系统,从开发到落地的全解析
本文链接:https://blog.firgt.cn/2025/08/02/littlepan/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可

评论

  1. Karlbaey
    Windows Edge 138.0.0.0
    23 小时前
    2025-8-02 22:20:50

    嗯……不知道该说不该说,这篇博客一股人工智能味。🤔

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇