构建一个私人图床应用

cover image
AI摘要
这篇文章讲了构建私人图床应用gotutu,基于Go语言开发。该图床支持多容器,包括对象存储、网盘和本地,实现轻松备份和迁移。同时,gotutu生成缩略图,通过query访问,减少流量消耗。提供API功能,方便PicGo插件开发。雏形项目已实现alist、又拍云、本地、内存容器,配置通过修改config.ini实时生效,推荐Docker部署。计划开源,添加多容器备份功能,保障图片安全,实现三级结构:原图、高质量压缩图、低质量缩略图。

私人图床应用暂时命名为 gotutu,基于go搭建

我想要的私人图床应该是什么样子

  1. 支持多容器,方便备份和迁移

    这里的多容器指的是能够将图片通过图床上传到例如对象存储、网盘之类的地方,也能够保存在本地,并且我们只需要将文件夹打包换个地方就能够轻松的完成迁移,不需要去修改图片地址。

  2. 支持缩略图,尽可能的压缩体积

    缩略图可以很大程度上的节省网站流量,很多图床都没有该功能,所以我希望私人图床能够自动生成缩略图,通过query可以访问到缩略图,比如https://test.com/123.jpg?size=small代表缩略图,而https://test.com/123.jpg代表原图,我们在实际网页中可以通过图片预览的功能实现图片的切换。

  3. 提供api功能,方便开发picgo插件之类的

    已经实践,结合picgo之后就更方便了

雏形

我使用GO写了一个基本的雏形项目,目前支持alist、又拍云存储、本地、本地内存,项目也比较简单,是无数据库的,所有的配置项的修改通过对目录下config.ini的修改进行,并提供api实现在不重启的情况下重载配置项,因为项目依赖项比较杂,所以只推荐docker部署。

为了更好的结合多容器,gotutu的原始图片容器与缩略图容器是拆分开的,也就是说你可以将原图容器部署到alist而把缩略图部署在本地内存中。通过接口类型对两类容器的函数进行了统一,也更加方便后续添加新的容器模板。比如下面这张图片就是使用gotutu来上传的,缩略图采用了webp压缩,将体积压缩的尽可能的小,质量也比较低。

项目结构

计划

  • 在完成主要功能后便会开源
  • 希望能够实现多容器备份的功能,确保图片的安全
  • 三级结构 原始图片、高质量的压缩后的图片、低质量并限制长宽的缩略图
评论
正在加载评论组件...