大多数博客的文章中应该都少不了图片。对于使用大公司提供的博客服务例如 Blogger、新浪博客、CSDN 的博主来说,可以直接上传图片,不太需要担心存储的问题。对于独立博客的博主来说,存储图片的方式就比较多了。下面就根据我写博客的经验来简单谈谈图片存储的问题。

使用博客程序管理图片

我在刚写博客的时候还不会 Markdown,写博客都是在博客程序提供的编辑器里写,需要插入图片也是直接通过编辑器上传。WordPress 也提供了一个简单的图片管理页面,上传的图片在管理页面都能找到,需要迁移网站的时候也可以直接打包迁移。

对于使用博客程序自带的编辑器写文章的博主来说,使用编辑器直接上传图片是比较方便的,不需要太担心图片的管理问题。不过像 WordPress 这一类的程序可能会生成比较多的缩略图,在多篇文章使用同一张图片的情况下可能也会生成多张图片。

第三方图床

我使用 Markdown 写文章都是先在本地用 Markdown 编辑器写好,然后在复制到博客程序中粘贴,这种方式就不太适合使用博客程序来管理图片了。WordPress 中的图片只能在编辑器中插入文章,对于使用本地编辑器的我来说不太方便插入图片。

图床是一种公开的网络相册,它的主要功能就是通过 URL 来分享图片。把图片上传到图床后可以获得一个图片地址,通过这个地址可以直接访问图片,这个地址也可以直接填入到 HTMLimg 中。

不过目前国内基本没有大公司做图床服务,QQ空间相册、百度相册之类的相册都是用于个人照片存储和好友间分享使用的,不能直接通过 URL 访问图片。之前新浪微博上传的图片还可以通过图片 URL 访问,但是现在也加入了防盗链,在其他网页中无法加载。

现在可用的图床基本都是个人或小团队提供的,而个人的资金和精力都有限,不一定能长久的运营下去。如果图床关停就需要迁移图片,对于图片或文章较多的博客来说,跟换文章中的图片链接也是一件非常麻烦的事。前面说的迁移还是情况比较好的,有的图床关停可能连图片都找不回。

下面是一些运营时间比较长的第三方图床:

除了用图床服务外也可以用 Github Pages 之类的静态网站托管服务来存储和分享图片,把图片上传到 Github Pages ,然后输入 Pages 的仓库地址和图片地址也能访问到图片,在其他网站中也能加载。不过 Github Pages 在国内的速度比较慢。

自建图床

有一段时间我的图片都放在网站目录下的 img 文件夹中,图片上传到这个文件夹可以直接通过 域名/img/文件名 访问。这种方式的好处就是不会生成太多的文件,图片也可以很方便的和网站一起迁移,坏处就是每次上传完成后都需要手动拼接地址,多篇文章需要用到同一张图片的时候也不方便查找。

为了解决上面的问题,我还是自己编写了一个简单的图床程序。主要功能就是上传完图片可以直接显示图片地址,除了上传图片外也能和相册一样的管理图片,主要包括图片预览、命名、删除,命名主要是方便查找,以后如果遇到多篇文章需要用到同一张图片的情况就不需要重新上传,可以直接搜索。后端主要用 PHP + SQLite 数据库,前端使用 Bootstrap 5 + Vue。因为 SQLite 只是一个单文件的数据库,所以这个图床程序可以直接放在网站目录中,迁移的时候也可以直接打包网站。

目前这个图床程序的功能还比较简陋,基本只能给个人使用,等功能完善一些会考虑开源。

除了自己开发外目前也有很多开源的图床程序,下面是一些 Star 比较多的图床程序:

其中 PicGo 主要是一个上传工具,上传的图片还是需要存储在 Github 或对象存储。

如果你要把图片存到网站服务器的话,带宽就不能太低,要想让图片快速显示,带宽至少也要有 3M ,图片多的话可能还需要更高。

目前国内也有一些云服务商提供免费的对象存储服务,下面是我知道的一些免费对象存储:

以上是长期提供免费对象存储服务的商家。免费的存储服务的空间和流量都不是太高,但对于访问量少的小博客来说也已经足够。要使用这些免费的对象存储,你需要有一个已备案的域名。

其它

如果你是使用 Github Pages 的静态博客并且没有服务器的话,图片可以直接放到博客程序的图片文件夹中,直接通过相对路径来引入图片,Typora 支持的编辑器也能显示相对路径引入的图片。不过随着图片数量的增加,同步到 Github 需要的时间也会增加。