简介
使用七牛云搭建个人图床,并使用python脚本实现自动化批量上传图片,并生成图片的外链。
注册七牛云
首先在七牛云官网注册个人账号,并进行实名认证。
七牛云有10G免费的永久存储空间,就算超出10G也能以较低价格购买存储空间,所以是搭建图床的不错选择。
新建空间
在对象存储中点击新建空间
输入存储空间名称,存储区域选择离自己较近的,访问控制选择公开,最后点击确定。
域名查看
密钥查看
python自动化脚本
安装七牛云三方库
pip install qiniu
登陆七牛云
密钥获取方式可参考上文
# 需要填写你的 Access Key 和 Secret Key
access_key = ''
secret_key = ''
# 构建鉴权对象
q = Auth(access_key, secret_key)
遍历找出文件夹中的所有图片
此处文件夹中的子文件夹中的图片也会被遍历出来
def search_pic(localdir):
for dir_path, _, files_list in os.walk(localdir):
for file in files_list:
# 可以自定义需要上传的图片格式
if file.split(".")[-1] in ["jpg", "JPG", "png", "PNG"]:
yield os.path.join(dir_path, file)
批量上传图片
域名地址获取方式可参考上文
# q为登陆七牛云后得到的对象
def upload_pic(q, file_name):
# 域名地址
base_url = ""
# 要上传的空间
bucket_name = ''
# 上传后保存的文件名,为了防止文件名相同,此处使用时间给文件进行重命名。
key = datetime.now().strftime("%Y%m%d%H%M%S%f") + "." + file_name.split(".")[-1]
# 生成上传 Token,可以指定过期时间等
token = q.upload_token(bucket_name, key, 3600)
ret, info = put_file(token, key, file_name, version='v2')
try:
assert ret['key'] == key
assert ret['hash'] == etag(file_name)
# 成功后打印图片的外链,可以自行修改为写入本地文件
print(os.path.join(base_url, key))
except:
print(file_name + "----error----")
完整代码
import os
from datetime import datetime
from qiniu import Auth, put_file, etag
def search_pic(localdir):
for dir_path, _, files_list in os.walk(localdir):
for file in files_list:
if file.split(".")[-1] in ["jpg", "JPG", "png", "PNG"]:
yield os.path.join(dir_path, file)
def upload_pic(q, file_name):
base_url = ""
bucket_name = ''
key = datetime.now().strftime("%Y%m%d%H%M%S%f") + "." + file_name.split(".")[-1]
token = q.upload_token(bucket_name, key, 3600)
ret, info = put_file(token, key, file_name, version='v2')
try:
assert ret['key'] == key
assert ret['hash'] == etag(file_name)
print(os.path.join(base_url, key))
except:
print(file_name + "----error----")
if __name__ == '__main__':
access_key = ''
secret_key = ''
q = Auth(access_key, secret_key)
# 需要批量上传图片的文件夹的本地路径
localdir = '/Users/xxx/Desktop/xxx'
files = search_pic(localdir)
for file in files:
upload_pic(q, file)
运行效果
上传成功后会打印图片的外链,点击即可查看图片。