【开源项目】Node-S3-Image-Hosting:一款轻量级、高性能的自有图床解决方案
【开源项目】Node-S3-Image-Hosting:一款轻量级、高性能的自有图床解决方案
🔗 项目传送门:GitHub - Mumu615/s3-image-server
如果觉得项目不错,欢迎点个 Star ⭐️ 支持一下!
💡 为什么开发这个项目?
在日常开发和写作中,图床是必不可少的工具。虽然市面上有 PicGo + 各种云存储的方案,但在寻找后端服务时,我发现现有的开源方案要么过于臃肿(附带了庞大的后台管理系统),要么对中文文件名支持不佳(上传后容易出现乱码),要么不支持秒传(导致大量重复文件占用存储空间)。
为了解决这些痛点,我开发了 S3-Image-Hosting —— 一个专注于性能与兼容性的后端图床服务。它完全掌控数据,支持所有兼容 S3 协议的云存储(如 AWS S3、Cloudflare R2、阿里云 OSS、MinIO 等),非常适合作为个人或团队的私有图床后端。
✨ 核心特性
1. 🚀 智能秒传机制
利用 SHA-256 哈希算法,在文件上传前计算指纹。
- 节省空间:如果同一张图片(内容相同)被多次上传,服务器只会存储一份文件。
- 极速响应:重复上传时无需再次传输数据,直接返回已有 URL。
2. ☁️ S3 协议全兼容
核心存储层基于 aws-sdk 构建,这意味着它不局限于 AWS,而是支持所有标准 S3 协议的对象存储服务:
- AWS S3
- Cloudflare R2 (强烈推荐,免流量费)
- Aliyun OSS / Tencent COS
- MinIO (自建存储)
3. 🧩 中文文件名完美支持
这可能是很多图床的痛点。本项目内置了智能编码修复中间件:
- 自动识别并修复上传过程中的中文乱码(utf8/latin1/url encode)。
- 对文件进行自动重命名(
日期/哈希_时间戳格式)以避免存储桶层面的文件名冲突,同时在数据库中保留原始文件名以便搜索。
4. ⚡️ 轻量级 & 高性能
- 技术栈:Node.js (Express) + MySQL。
- 架构:移除了不必要的 Base64 存储,极大降低了数据库压力和 API 响应体积。
- 文档:集成 Swagger UI,启动即可查看和调试所有 API。
🛠️ 技术架构
- Runtime: Node.js
- Web Framework: Express 5.x
- Database: MySQL 5.7+
- Docs: Swagger (OpenAPI 3.0)
📦 快速部署指南
只需简单的几步,你就可以拥有自己的图床服务:
第一步:克隆项目
git clone https://github.com/Mumu615/s3-image-server.git
cd s3-image-server
第二步:安装依赖与配置
npm install
# 复制配置文件
cp .env.example .env
编辑 .env 文件,填入你的 S3 和数据库配置:
# 你的 S3 配置
S3_ACCESS_KEY=xxx
S3_SECRET_KEY=xxx
S3_BUCKET=my-bucket
...
第三步:初始化数据库
mysql -u root -p < database.sql
第四步:启动!
npm start
服务默认运行在 http://localhost:40001,访问 /api-docs 即可看到完整的接口文档。
📝 API 预览
| 方法 | 路径 | 功能 |
|---|---|---|
POST |
/api/images/upload |
上传图片(支持 multipart/form-data) |
GET |
/api/images/list |
分页获取图片列表,支持按月份、关键词筛选 |
DELETE |
/api/images/batch-delete |
批量 ID 删除图片 |
GET |
/api/images/hash/{hash} |
根据哈希值查询图片信息 |
🤝 参与贡献
如果你在使用过程中发现 BUG 或有新的功能建议,欢迎在 GitHub 上提 Issue 或提交 PR。
再次传送门 👉 GitHub - Mumu615/s3-image-server
如果这个项目对你有帮助,请不吝赐予一颗 Star ⭐️,这对我非常重要!
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 爱喝可乐