在如今的云存储时代,无论是个人开发者需要图床服务,还是小团队需要简易文件共享工具,一款可控、轻量、安全的自建网盘系统都显得尤为重要。基于此,我在开源项目Oneui_Pan的基础上二次开发了LittlePan——一款专注于外链管理的轻量网盘系统。本文将从功能细节、技术实现、安装配置到实际应用场景,全方位解析这款工具的设计与落地。
最初接触Oneui_Pan时,其"轻量PHP架构+简单部署"的特点吸引了我,但实际使用中发现了不少影响体验的问题:
作为经常需要分享文件和搭建个人图床的开发者,这些问题直接影响了使用效率。因此,我决定在原项目基础上进行二次开发,最终形成了LittlePan——保留轻量特性的同时,补足了功能短板,强化了安全性。
LittlePan的核心设计理念是"够用、稳定、易扩展",主要功能可分为用户端基础功能和开发者API能力两部分。
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");
view.php
实现),无需下载即可查看内容;file.php
),方便不同场景使用:
// file.php 中链接生成逻辑
$viewurl_all = $siteurl . 'view.php/' . $row['hash'] . '.' . $row['type'];
$downurl_all = $siteurl . 'down.php/' . $row['hash'] . '.' . $row['type'];
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 + '%');
};
LittlePan的一大亮点是重构了API系统,让开发者可以轻松集成文件存储能力到自己的应用中。
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"
}
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;
// 其他存储引擎...
}
针对原项目的安全漏洞,LittlePan做了多重加固:
htmlspecialchars
处理,防止XSS攻击;csrf_token
验证(upload.js
中携带token);api.php
中删除逻辑):
// API删除文件的权限校验
if(!empty($file['pwd']) && $delete_data['file_pwd'] !== $file['pwd']){
showresult(['code'=>-1, 'msg'=>'密码错误']);
}
LittlePan采用"PHP+MySQL+多存储引擎"的架构,整体设计遵循"简单可依赖"原则,核心模块包括:
api.php
(API处理)、upload.php
(上传)、down.php
(下载)等文件,通过includes/common.php
加载公共配置;lib/Storage/
目录下的类)实现多存储支持,方便扩展新的存储方式。这种架构的优势在于:
LittlePan的安装过程极为简单,无需复杂依赖,适合新手操作:
下载与部署
从Releases页面下载最新版本,解压到网站根目录(如Nginx/Apache的www
目录)。
自动安装
访问网站域名,自动跳转至安装界面(install/index.php
),按提示填写MySQL数据库信息(主机、用户名、密码、数据库名),完成后系统会自动创建数据表并生成配置文件。
基础配置
admin/index.php
),可查看文件统计、服务器信息(PHP版本、MySQL版本等);about.php
文件,添加网站介绍、使用规则等内容;验证安装
上传一个测试文件,检查是否能正常生成外链、在线预览,API是否可调用(可通过Postman测试)。
LittlePan的轻量特性使其适用于多种场景:
个人图床
配合Markdown编辑器(如Typora),通过API实现图片自动上传,生成的外链可直接插入文章,避免第三方图床"跑路"风险。
小团队文件共享
团队成员可上传会议资料、设计稿等,通过密码保护敏感文件,管理员在后台可查看上传统计,控制总存储用量。
临时文件传输
无需注册,上传后生成短期有效的外链,适合给客户发送临时文件(可手动删除过期文件)。
开发测试工具
作为轻量存储服务集成到其他项目,比如小程序的图片存储、APP的日志上传等,API文档详见官方指南。
LittlePan的迭代始终围绕"解决实际问题":
未来计划包括:
LittlePan已开源(MIT协议),欢迎体验和贡献代码:
如果你正在寻找一款"够用、稳定、可自建"的外链网盘工具,LittlePan或许是个不错的选择。轻量不代表简陋,简单背后是对核心需求的专注——让文件管理回归本质,无需复杂配置即可上手使用。