聊一下我自己的博客是怎么处理图片存储使用图床这件事的

我的博客是运行在华为云上的一台小主机上,带宽是1m的小水管,对于这样的小水管来说。做个没啥人访问的博客绰绰有余,但是如果再加上图片呢?对于图片来说,一两张图片还是ok的,但是如果图片比较多的话,1m的小水管就力不从心了,所以这个时候就需要一个关键的东西上场,那就是——图床。

顾名思义,图床就是一些专门提供图片上传,存储,访问的服务。问我为啥不直接使用各种云服务的对象存储服务?因为穷!!此处插播一条广告:有需要使用华为云的欢迎使用我的邀请地址注册华为云账号https://reg.huaweicloud.com/registerui/cn/register.html?locale=zh-cn&fromuser=bGlxaW5nY2Fu#/register

言归正传,使用图床来存储博客的图片固然好,但是万一图床某一天失效挂掉了呢?(此处参考使用微博做图床的例子)那么你的博文中大量的图片都将丢失。

综上我们可以总结:
| 方案 | 优点 | 缺点 |
| —————— | —————— | —————— |
| 使用本地存储 | 博客在图片在,不怕丢失(备份需要自己做) | 占用博客系统大量的带宽,图片加载速度不理想 |
| 使用云服务商提供的对象存储服务 | 图片有备份,加载速度快,不占用博客系统的带宽 | 要花钱 |
| 使用免费的图床服务 | 加载速度快,不占用博客系统的带宽 | 免费的图床服务挂掉之后,图片丢失 |

为了解决图片的问题,参考之前在v2上看到有人实现的一个聚合图床服务的思路,我设计了我博客所使用图片的方案:

上传阶段:
1、图片先上传到博客系统
2、博客系统将图片上传到华为的OBS对象存储服务(这里为什么是华为的OBS呢?因为我主机是华为的,华为的OBS服务内网的宽带流量是免费的)
3、博客系统数据库中有一张图片的记录表,记录图片的id,华为OBS的对象key(用来从OBS获取图片的主键),第三方图床的url
4、图片上传到OBS之后,在3中的图片表新增一条记录,并返回图片上传成功及对应我自己的url地址。

读取阶段:
1、访问图片的url(我自己博客系统的url)
2、根据url上图片的id,从图片表中读取数据,读取第三方图床link的值并进行有效性检测
3、link为空或link失效,从OBS下载我们的图片并返回给前端页面,并添加一个更新link的任务见5
4、link不为空且link有效,使用301重定向到link
5、更新link任务,手动从OBS下载图片并再次上传图片到第三方图床

综上我使用了OBS做图片备份,使用图床做图片的加速服务。其实我这么做的方案还有另外有一个问题,那就是图床服务挂掉了,这个时候图片无论再怎么重新上传都会是失败的,但是考虑到图床不会那么频繁的挂掉,所以我暂时没有针对这种情况做处理,等真的挂掉了,我再把上传第三方图床的代码修改成另一个图床,其他代码不需要改变,因为OBS的存在 ,图片也不会丢失。

以上就是我博客对图片的处理,仅供参考。


觉得内容还不错?打赏个钢镚鼓励鼓励!!👍