【开源项目】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 ⭐️,这对我非常重要!