手把手配置图床并一键上传图片

配置图床,感觉已是学习记录时必备的一项技能。旨在将图片保存在云端服务器,方便查看。

因笔者使用的七牛图床测试域名已被收回,改用网易云图床(免费),并以此文章作为记录

网易云图床申请

赠送对象存储50G的存储空间、20G的月流量、100万次get请求、10万次put请求!具体详情页

注册成功后进入对象存储、创建桶(桶为对象存储的容器)。创建好后即可拥有自己的图床,步骤如图所示:

  • 手动管理图片对象(略)

自动管理上传图片

上传图片需要使用到自己的秘钥,因此首先要找到个人秘钥
位置如下图所示

  • 构建请求上传图片(文档)
  • 利用SDK上传图片(文档)
  • 图片上传(python SDK)
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种较为简单的执行思路

  1. 终端 使用alias取别名
  2. 使用Alfred设置工作流程
  3. 自定义command文件执行脚本

如有不正确之处望之处,谢谢

posted @ 2018-10-18 20:53  紫色大番薯  阅读(1544)  评论(0编辑  收藏  举报