本文主要解决两个问题:
- 将七牛云bucket中的图片批量下载回本地,并放入相应的文件夹;
- 批量更新markdown文件中的图片链接,重新部署到云端。
一年余来,被Windows Insider坑到重装系统之后,就没搞过hexo博客。近期重装部署了一下,发现步骤还是非常快的。
然后发现七牛云图床的图片全部不能显示了。这一年由于忙其他事情,七牛云发过来的关于测试域名过期的邮件也没有认真看。
当年七牛云还是一个比较主流的图床,使用者众,所以网上也有很多补救的方法。有相当一部分博主是把换用腾讯云作为图床。去腾讯云看了一下,发现现在只能免费半年了。还有一部分绑定了备案域名。
我的博客是Coding.net和Github两地部署 ,其中Github一直是无限容量,而Coding.net刚好出了新政策,升高到腾讯云开发者平台也能有无限容量。于是先试用 不使用外部图床 的方案。
思路很清晰,先从把七牛云的图片批量下载回本地,放入文章对应的文件夹,更新markdown文件中的图片链接,重新部署到云端。这是markdown中本地和线上图片自动传图床并替换链接 的反向操作,那应该也可以使用python解决。
搜索了一番,居然没有现成的代码。大多数人是使用七牛云的qshell工具来下载图片,这种方法下载的图片都在本地的一个文件夹里面,遇到重名的图片不知道怎么解决,后期整理再更新链接还很麻烦。感觉花了太多时间搜索,其实七牛云官方就有关于Python SDK的详细文档(写得甚至比腾讯云Python SDK文档还好)。《Hexo博客(23)弃用七牛云图床改为git仓库图床》这篇文章解释了这个SDK怎么用。
接下来讲讲具体的操作:
一、将过期bucket中的图片批量复制到新bucket
由于原先图床的bucket测试域名已过期,没办法直接下载其中的图片,需要先将图片转移到新bucket。
根据官方提供的批量查询文件信息和批量复制文件两段python代码,分步测试,直接拼成我们需要的代码。
1 | # -*- coding: utf-8 -*- |
在七牛云的后台可以看到运行成功的结果。我的bucket中有100多个文件(后续的操作得知有80个图片),一共就7点几MB,手工搞链接还是比较繁琐的。
运行结果大概如下:
1 | 2017-11-11_zgtvi0 |
注意bucket的文件的key并不就是文件名,有时还包含了路径(子文件夹)。
由于搞博客时搞过几个版本的图片命名方式,所以图床的图片名有几个版本,后期的版本还没有图片后缀。幸好在没有后缀的情况下,浏览器和图片查看软件也能解析 。
二、下载图片、替换链接
hexo启用了文章资源文件夹之后,文章的图片是放在同名文件夹中,markdown写作时使用
引用。网上别人文章的解决思路多是先批量下载图片、再去放置图片和修改链接,实际去匹配图片和链接也麻烦。而我的思路如下: