起因

在使用COS存储这个博客的静态页面的过程中,需要通过某种手段对存储桶中的数据和本地的数据进行一致性校验。如果仅仅是检查文件存在不存在,是肯定不行的。因为文件可能发生了变动。
通过对COS文档的阅读,发现返回头中的Etag属性,包含了文件的md5数值。

对象存储的文档截图

代码

1
2
3
4
import hashlib
# srcKey 是本地文件的路径
with open(srcKey, 'rb') as f:
local_md5 = hashlib.md5(f.read()).hexdigest()

验证

首先访问一个远程文件,使用控制台查看请求头
37b开头的Etag

再看下这个代码返回的数值

程序跑通了😁

其他

在做同步的过程中还有一些小问题要注意——本地没有的远程文件还需要删除。为什么说这个是个小问题呢,因为远程文件只多不少是没有问题的,只要远程文件完全包含本地的静态网页、并和本地的文件一致,用户正常情况下是不会点击到本地不存在的页面的。但是出于对CDN的延迟,以及费用问题的考虑,远程的存储同最好还是要定期做一下彻底删除+重新完整上传为妙。