背景:由于现在云储存的发展,许多东西储存到云端更加方便,比如:图片;网上最多的工具就是七牛云以及上传利用工具,但是七牛云需要手持身份证实名认证,所以放弃;其次没有关注腾讯云,所以选择了阿里云,其实优惠力度还是腾讯的比较大;为了避免麻烦,就没有在做迁移了,使用过的可以与阿里云关联的极简图床,但是我们还是需要一张张的拖图片,然后复制makedown连接,这样还是太麻烦了,有一天看到大佬写了一个腾讯云的工具,所以,在学习之余写了这个工具。
程序流程图如下:
功能实现
图片截图以后,从粘贴板获取图片保存到本地Image文件夹下
使用win32clipboard,win32con,PIL模块
1
2
3
4import win32con
import win32clipboard as w
from PIL import ImageGrab
from PIL import Image
1
2
3im = ImageGrab.grabclipboard() #从粘贴板获取内容
if isinstance(im,Image.Image): #判断是不是图片
name = str(time.time()) + ".png"获取到图片以后判断是否为图片然后保存到本地
这里说明一点:PIL模块是处理图像的,使用PIL处理过图像以后是使图像变小,有利于进行云储存
将图片上传以后的生成的访问地址添加到粘贴板
使用win32clipboard,win32con模块
1
2
3
4
5def setText(self,aString):
w.OpenClipboard()
w.EmptyClipboard()
w.SetClipboardData(win32con.CF_TEXT,aString)
w.CloseClipboard()这里存在一个坑:win32con.CF_TEXT这里在Python2中会将所有的字符串添加到粘贴板,早Python3中只会添加首个字符,解决办法:将CF_TEXT替换为CF_UNICODETEXT,如果在Python2中使用CF_UNICODETEXT会出现添加到粘贴板的字符是乱码
上传图片到OSS
使用oss2、shutil 模块,oss2是官方提供的Python OSS SDK,支持Python2、3
1
2
3
4
5
6def upload(self,file_name,name):
bucket = oss2.Bucket(oss2.Auth(self.acc_id,self.acc_secret),self.endpoint,self.bucket_name)
data = bucket.put_object_from_file(key='Blog/'+ name,filename='image/'+ name, headers=None, progress_callback=None)
str = "https://xxxxxx.xx/" + name
shutil.rmtree('image')这里要在外部的 config文件中配置好阿里云提供的:Access Key ID、Access Key Secret、bucket_name、endpoint
- 说明:由于阿里云的SDK默认不支持文件夹,目录的概念,所以通过添加’/‘来表示在那个文件夹下;又由于没有返回文件访问连接地址的接口,所以通过固有的形式进行组合
- shutil模块进行清空本地存放已经上传完的的图片(这样会删除文件夹,比遍历更加快速),这一点看个人了,可有可无,也可以使用os模块进行相应的操作。
设置阿里云OSS的接口信息
通过外部的config文件导入
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15try:
infoDict = {}
with open("config.conf","r") as file:
ApiInfo = file.readlines()
for info in ApiInfo:
try:
if info != "\n" and info != "":
tmp = info.split("=")
infoDict[tmp[0].strip()] = tmp[1].strip()
except Exception as e:
print u"[-] 请按照要求配置config.conf"
sys.exit()
except Exception as e:
print u"[-] 请在config.conf中配置阿里云 API信息"
sys.exit()
结果示例
参考文章
- [OSS SDK-Python]:https://github.com/aliyun/aliyun-oss-python-sdk
更新说明
现在已经修改可以支持python3的环境,详情请看github