ImgBed:完全用AI撸一个开源图床聚合工具,让免费存储渠道为你所用

5 阅读9分钟

ImgBed:完全用AI撸一个开源图床聚合工具,让免费存储渠道为你所用

引言

作为开发者或内容创作者,我们经常需要一个可靠的图床服务来存储和分享图片。无论是写博客、做文档,还是在社交媒体上分享内容,一个稳定、高效的图床都是不可或缺的工具。

然而,市面上的图床服务要么收费昂贵,要么有各种限制,免费的服务又往往不稳定。有没有一种解决方案,既能免费使用,又能保证稳定性和可靠性呢?

今天,我要向大家介绍一个开源的图床聚合工具——ImgBed,它可以帮你聚合多个免费存储渠道,提供稳定可靠的图片上传和外链管理能力。

什么是 ImgBed?

ImgBed 是一款开源免费的图床聚合工具,采用 Go 后端 + Vue3 前端架构,专注于聚合各大免费存储渠道,提供简单易用的图片上传和外链管理能力。

核心特点

  • 多渠道存储:支持本地存储、Telegram Channel、Cloudflare R2、S3 兼容(AWS/MinIO/阿里云 OSS)、Discord、HuggingFace Dataset 等多种存储渠道
  • 智能调度:支持轮询、随机、优先级三种策略,自动切换可用渠道,防止单渠道故障导致服务中断
  • 图片优化:上传前自动压缩,支持 WebP 格式转换,可配置压缩质量和最大尺寸
  • 失败重试:上传失败自动尝试其他渠道,确保上传成功率
  • 多格式链接:上传成功后返回 URL、Markdown、HTML 三种格式的链接
  • 秒传:基于 SHA-256 校验,已存在的文件可直接跳过上传
  • 数据备份:支持自动备份和手动备份,保障数据安全
  • 零依赖部署:前端和管理后台嵌入到单一二进制文件中,实现开箱即用
ImgBed 主界面截图

ImgBed 主界面,展示上传区域和功能入口

技术架构

后端技术栈

  • Go 1.25+:高性能、并发友好的编程语言
  • Gin:轻量级、高性能的 Web 框架
  • GORM:强大的 ORM 库,简化数据库操作
  • SQLite:轻量级、零配置的嵌入式数据库
  • Viper:多格式配置管理
  • Zap:结构化日志
  • WebP 编码:纯 Go 实现的 WebP 编码,无需 CGO
  • 图片处理:使用 imaging 库进行图片缩放和处理

前端技术栈

  • Vue 3:使用 Composition API + <script setup> 语法
  • Vite:快速的前端构建工具
  • Element Plus:企业级 UI 组件库
  • Tailwind CSS:实用的 CSS 框架
  • Pinia:Vue3 官方推荐的状态管理库
  • Vue Router:前端路由
  • ECharts:数据可视化图表库

存储驱动

ImgBed 支持多种存储驱动,包括:

驱动类型标识特点
本地存储local零依赖、直接文件系统存储
Telegramtelegram免费、适合小文件 (≤20MB)
Cloudflare R2cfr2无出站流量费用、S3 兼容
S3 兼容s3AWS/MinIO/阿里云 OSS 等
Discorddiscord免费、支持较大文件 (≤25MB)
HuggingFacehuggingface开源项目托管、免费存储

核心功能详解

1. 多渠道存储与智能调度

ImgBed 的最大特点是支持多种存储渠道,并能智能调度上传请求。你可以添加多个存储渠道,设置不同的优先级,当一个渠道上传失败时,系统会自动尝试其他渠道,确保上传成功率。

调度策略包括:

  • 轮询 (round_robin):按顺序依次使用各个渠道
  • 随机 (random):随机选择一个渠道
  • 优先级 (priority):按优先级高低选择渠道
ImgBed 渠道管理界面

ImgBed 渠道管理界面,展示已配置的存储渠道和状态

2. 图片压缩与格式转换

ImgBed 支持自动压缩图片和转换格式,帮助你节省存储空间和带宽:

  • 压缩质量:可配置压缩质量 (0-100),默认 80
  • 目标格式:支持转换为 WebP 等高效格式
  • 尺寸限制:可设置最大宽度和高度,超过则自动缩放

3. 文件管理

ImgBed 提供了完整的文件管理功能:

  • 文件列表:分页展示,支持缩略图/列表视图切换
  • 搜索筛选:支持文件名搜索、渠道搜索,上传来源搜索,支持模糊搜索时间范围筛选
  • 批量操作:支持全选当前页、批量删除
  • 一键清理:一键删除指定时间范围前的所有文件
  • 链接复制:一键复制文件链接,支持多种格式
  • 图片预览:点击文件可在线预览
ImgBed 文件管理界面

ImgBed 文件管理界面,展示文件列表和管理功能

4. 统计报表

ImgBed 提供了详细的统计报表,帮助你了解各渠道的使用情况:

  • 总览统计:总文件数、总大小、今日上传数
  • 渠道统计:各渠道上传成功/失败数、成功率
  • 使用趋势:每日/每周上传量趋势图
  • 可视化图表:渠道使用占比饼图、每日上传趋势折线图、各渠道成功率柱状图
ImgBed 统计报表界面

ImgBed 统计报表界面,展示各渠道使用情况和上传趋势

5. 数据备份

数据安全至关重要!ImgBed 内置了完善的数据库备份功能,保障你的图片元数据安全:

  • 自动备份:可配置备份周期(默认每 24 小时),自动备份 SQLite 数据库
  • 手动备份:一键创建备份,方便在重要操作前保存快照
  • 备份管理:查看备份列表、删除不需要的备份文件
  • 一键恢复:从备份文件快速恢复数据库
ImgBed 设置界面

ImgBed 设置界面,包含备份配置和管理功能

6. 第三方集成

ImgBed 提供了完整的 API 接口,支持第三方集成:

  • API Token 管理:创建、删除、启用/禁用 API Token
  • Token 权限控制:细粒度权限控制(upload/upload:multiple/read/delete)
  • 匿名上传接口:无需认证的上传接口(有限制)
  • Token 认证接口:API Token 认证的完整接口
  • 集成示例:提供 Typora、VS Code、Python、JavaScript 等集成示例
ImgBed Token 管理界面

ImgBed Token 管理界面,展示 API Token 列表和权限设置

使用场景

场景 1:个人博客

如果你是一名博客作者,需要在文章中插入大量图片,ImgBed 可以帮你:

  • 自动压缩图片,减小图片体积
  • 提供稳定的图片外链
  • 支持 Markdown 格式链接,直接复制到博客中
  • 批量上传多张图片,提高效率

场景 2:内容创作者

如果你是一名内容创作者,需要在社交媒体上分享图片,ImgBed 可以帮你:

  • 自动转换图片格式,确保在不同平台上的显示效果
  • 提供稳定的图片链接,避免链接失效
  • 管理历史图片,方便查找和复用

场景 3:开发团队

如果你是开发团队的一员,需要在文档和代码中使用图片,ImgBed 可以帮你:

  • 提供统一的图片管理平台
  • 支持批量上传和管理
  • 通过 API 集成到开发工具中
  • 控制上传权限,确保安全性
  • 定期备份数据,防止数据丢失

部署和使用指南

快速开始

  1. 下载二进制文件:从 GitHub Releases 页面下载对应平台的二进制文件
  2. 运行:直接运行二进制文件,系统会自动创建数据库和配置文件
  3. 多端支持: 服务器运行,除了通过web界面访问,还可以提供 api token 让其他app 接入访问,譬如聊天chat,问题反馈截图等这些需要传图的app; 也可以运行在个人电脑上,支持 mac 和 windows,鼠标点击就运行,出现在托盘图标区;

配置管理

所有配置通过管理后台界面在线修改,无需编辑配置文件。管理后台地址:http://localhost:8080/admin

第三方集成示例

Typora 配置

在 Typora 的「偏好设置」→「图像」中:

  • 上传服务:选择 Custom Command
  • 命令
curl -X POST https://your-imgbed.com/api/v1/upload \
  -H "X-API-Token: your_token" \
  -H "X-API-Secret: your_secret" \
  -F "file=@${filepath}" \
  | grep -o '"url":"[^"]*"' | cut -d'"' -f4

Python 脚本上传

import requests

class ImgBedClient:
    def __init__(self, base_url, api_token=None, api_secret=None):
        self.base_url = base_url
        self.api_token = api_token
        self.api_secret = api_secret

    def upload(self, image_path):
        with open(image_path, 'rb') as f:
            files = {'file': f}
            headers = {
                'X-API-Token': self.api_token,
                'X-API-Secret': self.api_secret
            } if self.api_token else {}
            url = f"{self.base_url}/api/v1/upload"

            response = requests.post(url, files=files, headers=headers)
            return response.json()

# 使用 Token(推荐,需先在管理后台创建 API Token)
client = ImgBedClient(
    "https://your-imgbed.com",
    api_token="your_token",
    api_secret="your_secret"
)

result = client.upload("image.jpg")
if result['code'] == 0:
    print(f"上传成功: {result['data']['links']['markdown']}")

总结与展望

ImgBed 是一款功能强大、易于使用的开源图床聚合工具,它通过聚合多个免费存储渠道,为用户提供了稳定、高效的图片存储和管理服务。

核心价值

  • 免费渠道聚合:最大化利用免费存储资源,避免单一渠道的限制和风险
  • 智能调度:自动切换渠道,提高上传成功率和稳定性
  • 图片优化:自动压缩和格式转换,节省存储空间和带宽
  • 数据安全:自动备份机制,保障数据安全
  • 简单易用:零依赖部署,直观的用户界面
  • 开源免费:完全开源,自由使用和修改

结语

如果你正在寻找一个免费、稳定、高效的图床解决方案,ImgBed 绝对值得尝试。它不仅可以帮助你解决图片存储的问题,还能为你节省时间和资源。

作为一个开源项目,ImgBed 欢迎更多开发者参与贡献,一起完善和改进这个工具。


项目地址github.com/mageg-x/img…

演示地址imgbed.mageg.cn/

希望这篇文章对你有所帮助,如果你有任何问题或建议,欢迎在评论区留言!