配置图床,感觉已是学习记录时必备的一项技能。旨在将图片保存在云端服务器,方便查看。
因笔者使用的七牛图床测试域名已被收回,改用网易云图床(免费),并以此文章作为记录
网易云图床申请
- 网易云登录注册
赠送对象存储50G的存储空间、20G的月流量、100万次get请求、10万次put请求!具体详情页
注册成功后进入对象存储、创建桶(桶为对象存储的容器)。创建好后即可拥有自己的图床,步骤如图所示:
- 手动管理图片对象(略)
自动管理上传图片
上传图片需要使用到自己的秘钥,因此首先要找到个人秘钥
位置如下图所示
import nos
access_key = "*********"
secret_key = "*********"
end_point = "****" # 区域名
bucket = "****" # 桶名,存放对象容器
def uploadImg():
client = nos.Client(
access_key,
secret_key,
end_point=end_point,
num_pools=10, # 允许打开的最大 HTTP 连接数
timeout=5, # 建立连接的超时时间(单位:秒)
max_retries=4, # 请求失败后最大的重试次数
enable_ssl=True # 后续与 NOS 服务器进行数据传输、交互时,是否使用 HTTPS
)
return client
client = uploadImg()
file_name = "****" # 上传后的文件名称
filePath = "****" # 所需上传的文件路径
client.put_object(bucket, file_name, open(filePath, "rb"))
- 图片统一上传
思路: 固定文件夹存放图片,每次上传时遍历文件夹内图片,逐一上传
网易云上传文件名称相同时会进行覆盖操作,可将上传过的文件名保存于本地,遍历图片上传时通过比对判断是否上传
# 关于本地存储方案又很多的选择,笔者此处选用mysql
try:
#获取一个数据库连接,注意如果是UTF-8类型的,需要制定数据库
conn = pymysql.connect(host='localhost',user='root',passwd='123456',db='数据库名',port=3306,charset='utf8')
cur = conn.cursor() #获取一个游标
cur.execute('select imgName from yunImgs')
datas = cur.fetchall()
data = []
for values in datas:
data.append(values[0])
client = uploadImg()
imgsDir = sys.path[0] + "/imgs"
fileNames = os.listdir(imgsDir)
upCount = 0
for file_name in fileNames:
if file_name == ".DS_Store" or file_name in data:
continue
try:
filePath = imgsDir + "/" + file_name
sql = "insert into yunImgs(imgName) values('" + file_name + "')"
cur.execute(sql)
conn.commit()
client.put_object(bucket, file_name, open(filePath, "rb"))
print(file_name,"上传完成")
upCount += 1
except Exception as e:
print(file_name + "上传出错: " + e)
conn.rollback()
cur.close() #关闭游标
conn.close() #释放数据库资源
print("图片上传完毕:新上传", str(upCount), "张图片")
except Exception as e :
print("上传出错: " + e)
- 一键上传图片
利用上述代码生成python脚本,上传时只需执行此文件即可。
为方便执行脚本,笔者提出3种较为简单的执行思路
如有不正确之处望之处,谢谢