0x00 背景

最近想要搭建一个对象存储服务,并把原本在七牛云上面的图片全部转移到该服务中管理,但是七牛云上面的图片命名本来就很乱,不符合批量管理的要求,所以不能从七牛云直接下载,而是要把图片名格式化一下,再下载下来,这种工作,用python是最适合不过了,于是就有了这篇文章。

0x01 过程

1. 命名规则转换

原本图片的命名是images/1979-01-01T0000/1.png这样的格式,现在要统一放在一个文件夹,所以需要去掉images文件夹,并把时间和图片名通过”-“拼接起来。

2. 将七牛云上面的文件名及其对应的url列表导出

这一步可以直接在七牛云上面批量操作,导出的文件是是csv格式的,所以在python中可以使用csv库直接进行读取

3. 编写代码

import requests
import csv

def download_img(img_url, api_token, name):
    print (img_url)
    header = {"Authorization": "Bearer " + api_token} # 设置http header,视情况加需要的条目,这里的token是用来鉴权的一种方式
    r = requests.get(img_url, headers=header, stream=True)
    print(r.status_code) # 返回状态码
    if r.status_code == 200:
        open('C:\\Users\\Jacky\\Pictures\\blogpic\\' + name, 'wb').write(r.content) # 将内容写入图片
        print("done")
    del r

if __name__ == '__main__':
    api_token = "apitoken"

    record = csv.reader(open('urls', 'r', encoding='utf-8-sig'))
    for i in record:
        name = i[0]
        # 改名
        name = name[7:].replace('/', '-')
        # 提取图片链接
        url = i[1]
        download_img(url, api_token, name)

0x02 总结

非常简单,就封装一个请求函数,然后读取csv文件里面的字段,给图片重命名并把url传入请求函数,把图片下载到指定目录。