1. 编写原因

最近一直纠结,自己文章的图片该放在哪里,我上传到图床会保留多少天?在知乎上面,发现普遍的答案是用七牛云的对象存储,似乎七牛云的对象存储做的还不错,有许多人用七牛来上传,保存自己的MarkDown笔记图片。网上一搜,我们也可以发现专门用来传图片的Mpic工具。但是始终找不到阿里云的上传工具。为此,我查阅了阿里云官方的OSS文档。下面简单展示一个Demo。

2. 功能说明

  1. 上传本地文件至OSS
  2. OSS自动为图片加水印
  3. 如果粘贴进去的是链接,则将图片下载后上传,并删除本地对应文件。

3. 所需库安装

pip install oss2   #用于图片的上传
pip install pyperclip   #用于MarkDown图片代码的复制
pip install requests   #获取远程图片

4. 代码展示

#encoding:utf-8
import oss2
import os
import datetime
import pyperclip
import requests

def upload(bucket):
    filePath = str(input()).strip()   #去除链接/路径前后的空格
    if filePath=="":
        return

    fileName = os.path.basename(filePath)   #提取文件名
    if "https://" in filePath:   #判断是否为网络文件(是否需要下载)
        r=requests.get(filePath)
        with open(fileName,"ab") as tmp:
            tmp.write(r.content)
            filePath=fileName

    now = datetime.datetime.now()
    t = now.strftime("%Y_%m_%d_%H_%M_%S_")
    remoteFileName = 'Markdown_image/' + str(t) + fileName  #设置远程文件名
    result = bucket.put_object_from_file(remoteFileName, filePath)  #上传文件

    if result.status == 200:
        print("上传成功!")
        my_web_adress = "https://harrycode.cn/"  #自己绑定OSS的域名,需要通过备案
        remote_file_adress = my_web_adress + remoteFileName+"!normal_pic"
        mkstyle="![]({} )".format(remote_file_adress)  #生成MarkDown语法的图片链接
        pyperclip.copy(mkstyle)   #复制到剪贴板
        print("已成功提交至oss,并成功复制")
        os.remove(filePath)   #删除本地文件
    else:
        print(result.status)
        print("网络出错,或出现其他未知原因!")

if __name__=="__main__":
    AccessKeyID="123456"
    AccessKeySeret="abcdef"
    auth = oss2.Auth(AccessKeyID, AccessKeySeret) #认证
    service = oss2.Service(auth=auth, endpoint='oss-cn-shanghai.aliyuncs.com')
    bucket = oss2.Bucket(auth, 'oss-cn-shanghai.aliyuncs.com', "harrycodesitefile") #创建用来上传文件的的bucket
    while(True):
        print("准备拖动图片上传。")
        upload(bucket)

5. 运行展示

  1. 准备上传图片 准备上传图片
  2. 将图片直接拖至黑框中 拖入图片
  3. 回车上传图片至OSS,并直接获取MarkDown语法的图片链接。 获取Markdown链接

6. 说明

  • 本次写的图片上传工具,是通用的,不是上传至某个公共图床,为了自己网站图片不挂,还是自己保管最为妥当。对象存储可以去各大市场选购。