七牛云图床上传脚本工具

运行环境

  1. python3.5.1
  2. pywin32插件
  3. 注册表注册文件pythonDrag.reg

####解决图片路径的快捷输入
​ 注册表文件内容:

1
2
3
4
Windows Registry Editor Version 5.00  

[HKEY_CLASSES_ROOT\Python.File\shellex\DropHandler]
@="{60254CA5-953B-11CF-8C96-00AA00B8708C}"

​ 这个注册表信息,可以将python文件标记为一个合法的可拖放的目的对象(drop target)。

​ 在将某个文件直接拖放到py文件上时,在可py脚本中可用sys.rgv来获取包含脚本本身和被拖放的文件绝对路径的字符串数组。

​ 如,将D盘更目录下一个名为Test.txt的文件拖放到名为Test.py的图标上,则会运行该py脚本,并且在脚本中有如下赋值:

1
sys.argv = ["D:\Test.py","D:\Test.txt"]

这样一来就解决了上传图片路径输入的快捷化,一个简单的拖拽操作就OK啦。

解决图片Markdown格式URL的快速输出

​ 最快速的输出是什么呢?在写文章时莫过于剪贴板了,如果能将上传好的图片外链直接生成相应格式的URL,并直接输出到windows的剪贴板中,剩下的就只是Ctrl+V了。

​ 几经搜索,我终于发现了pywin32这个神器,这是一个包含了许多windows Api的python扩展模块,利用这个扩展包我们就可以轻松的访问并修改windows的剪贴板了。

​ 一个简单的写入剪贴板的例子

1
2
3
4
5
6
7
import win32clipboard as clipboard
import win32con

clipboard.OpenClipboard() # 打开剪贴板
clipboard.EmptyClipboard() # 清空剪贴板
clipboard.SetClipboardData(win32con.CF_TEXT, "要写入剪贴板的文字") # 写入剪贴板
clipboard.CloseClipboard() # 关闭剪贴板

​ 一个简单的读取剪贴板的例子

1
2
3
4
5
6
import win32clipboard as clipboard
import win32con

clipboard.OpenClipboard() # 打开剪贴板
string = clipboard.GetClipboardData(win32con.CF_TEXT) # 读取剪贴板
clipboard.CloseClipboard() # 关闭剪贴板

接入七牛云python SDK

​ 很方便的是七牛云提供了python语言的相关API调用的SDK,在脚本中直接import qiniu就可以直接使用了,如下上传的demo:

1
2
3
4
5
6
7
8
9
10
import qiniu

AK = "" # Access Key
SK = "" # Secret Key
BUCKET_NAME = "" # 七牛云空间名
KEY = "" # 保存到云空间的文件名

Q = qiniu.Auth(AK, SK) #生成token要用到的鉴权对象
TOKEN = Q.upload_token(BUCKET_NAME,KEY,3600) # 生成token可以指定token的过期时间
qiniu.put_file(TOKEN, KEY, "上传的文件路径")

最后上一下整个脚本的代码吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# _*_coding:utf-8_*_

import sys
import os
import qiniu
import datetime
import win32clipboard as w
import win32con

url = "http://***************"
String = ""
KEY = ""

def GetFileNameWithDate(file):
filenames = os.path.basename(file).split('.')
return filenames[0] + '~~~~' + datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S") + '.' + filenames[1]

file = sys.argv[1]
if os.path.isfile(file):
AK = "********"
SK = "********"
BUCKET_NAME = "*****"
Q = qiniu.Auth(AK, SK)
KEY = GetFileNameWithDate(file)

TOKEN = Q.upload_token(BUCKET_NAME,KEY,3600)
qiniu.put_file(TOKEN, KEY, file)

String = String + "![]("+ url + KEY +")" + "\n"
print(String)

w.OpenClipboard()
w.EmptyClipboard()
w.SetClipboardData(win32con.CF_TEXT, String.encode("gbk"))
w.CloseClipboard()