1. 编写原因
最近一直纠结,自己文章的图片该放在哪里,我上传到图床会保留多少天?在知乎上面,发现普遍的答案是用七牛云的对象存储,似乎七牛云的对象存储做的还不错,有许多人用七牛来上传,保存自己的MarkDown笔记图片。网上一搜,我们也可以发现专门用来传图片的Mpic工具。但是始终找不到阿里云的上传工具。为此,我查阅了阿里云官方的OSS文档。下面简单展示一个Demo。
2. 功能说明
- 上传本地文件至OSS
- OSS自动为图片加水印
- 如果粘贴进去的是链接,则将图片下载后上传,并删除本地对应文件。
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+" "
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. 运行展示
- 准备上传图片
- 将图片直接拖至黑框中
- 回车上传图片至OSS,并直接获取MarkDown语法的图片链接。
6. 说明
- 本次写的图片上传工具,是通用的,不是上传至某个公共图床,为了自己网站图片不挂,还是自己保管最为妥当。对象存储可以去各大市场选购。