博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用automator上传图片到腾讯云
阅读量:6280 次
发布时间:2019-06-22

本文共 3254 字,大约阅读时间需要 10 分钟。

背景

前段时间折腾了一下hexo博客,部署了,设置了自己的域名转发,添加了https,仿佛万事具备,只差写博客了。然而发现博客配图还是个问题,因为markdown添加图片的时候,我想使用cdn,而不是本地图片。

于是考察了一些可以作为图床的云服务商,比如,, 。对比之后发现七牛不支持https,sm.ms完全免费,但功能似乎比较少,腾讯云的话有免费的几十G空间(具体多少我忘了)还提供https。嗯就用腾讯云吧。

图床选好了,那么上传图床的工具呢?都说iPic是个图床神器,最近还支持了腾讯云,不过需要付费。我需要的是一个免费版的,找了半天也没发现支持腾讯云的图床工具。作为一名coder,这怎么能忍?依稀记得好友的中有写使用automator上传图片到sm.ms,于是我借鉴(copy)了一下,就有了本文。不同之处在于我这里使用的是腾讯云的进行上传。

思路

使用automator上传图片的思路:

  • 点击本地图片,右键选择automator创建的服务
  • 调用预先编写好的脚本进行上传
  • 上传后将url写入剪贴板
  • 在markdown编辑器中直接粘贴享用

实现步骤

打开automator,选择新建服务:

然后在“实用工具”中,找到“拷贝至剪切板”拖拽到右侧工作流程,这样,当我们选中图片的时候,就会将图片的本地路径设置到剪贴板中:

我们需要在这个创建服务的过程中进行实际测试,因此可以将“获得指定的访达(finder)项目”这个使用工具添加到右侧的工作流中,放在顶部,并添加几张图片作为测试用(后面需要再删除的),如下图:

然后点击右上角的运行按钮,运行完成后,查看自己的剪贴板内容,就会发现剪贴板内容正是图片的路径。

现在图片路径有了,再添加一个shell脚本的工作流,在脚本里面获取剪贴板里面的图片路径,然后进行上传,再将上传后的腾讯云的图片地址设置进剪贴板里,就行了。

将“运行shell脚本”这个工作流添加到右边,作为第三个工作流,并且选择python作为默认shell,如下图:

上图中的python代码所做的事情就是上传图片,并设置剪贴板内容,code如下:

# -*- coding=utf-8from qcloud_cos import CosConfigfrom qcloud_cos import CosS3Clientimport osimport subprocess# 上传腾讯云需要的相关配置,可在这里查看:https://console.cloud.tencent.com/cam/capisecret_id = 'your_cos_secret_id' # 此处填入腾讯云的secret_id,secret_key = 'your_cos_secret_key' # 此处填入腾讯云的secret_keyapp_id = 'your_app_id' # 此处填入app_idregion = 'your_region' # 此处填入对象存储的地区token = ''  # 使用临时秘钥需要传入 Token,默认为空,可不填bucket_name = 'your_bucket_name'bucket = bucket_name + '-' + app_id  # Bucket由bucketname-appid组成legal_extensions = ['.jpg', '.jpeg', '.png', 'gif']# 获取剪贴板内容def getClipboardData():    p = subprocess.Popen(['pbpaste'], stdout=subprocess.PIPE)    retcode = p.wait()    data = p.stdout.read()    return data# 设置剪贴板内容def setClipboardData(data):    p = subprocess.Popen(['pbcopy'], stdin=subprocess.PIPE)    p.stdin.write(data)    p.stdin.close()    retcode = p.wait()# 判断扩展名是否合法def validate_image(path):    extension = os.path.splitext(path)[1]    if extension in legal_extensions:        return True    else:        return False# 上传至腾讯云def upload(file_name, filepath):    config = CosConfig(Appid=app_id, Secret_id=secret_id, Secret_key=secret_key, Region=region, Token=token)    # 获取客户端对象    client = CosS3Client(config)    with open(filepath, 'rb') as fp:        response = client.put_object(            Bucket=bucket,            Body=fp,            Key=file_name,            StorageClass='STANDARD',            ContentType='text/html; charset=utf-8'        )        # print responsedef main():    contents = getClipboardData().split("\n")    uploaded_url = ""    for path in contents:        if validate_image(path):            file_name = os.path.basename(path)            upload(file_name, path)                        # 拼接成markdown的image链接格式            uploaded_url += '![](' + 'https://' + bucket + '.cos.' + region + '.myqcloud.com/' + file_name + ")\n"		# 将url设置到剪贴板中    setClipboardData(uploaded_url)main()复制代码

代码量不多,其中上传函数upload的实现是使用的.如何安装sdk,以及更多使用方式,请参考官方文档

tips: 这里运行的过程中不但可以单步调试,还可以查看程序输出,以便进行测试:

到这里上传功能已经实现了,如果再加一个上传完成后给个提示就更好了。

将“显示通知”这个工作流添加到右侧工作区,设置通知内容,然后执行,就会看到通知提示

至此,功能已经实现,现在把第一个工作流“获取指定的finder项目”删除。保存这个服务,并取一个名字:

然后随便找一个图片,右键呼出菜单,就会看到我们刚创建的服务,不出意外,就可以正常使用了:

如果下次再想对这个服务进行编辑的话,该去哪里找呢?其实这些自定义的服务是放在~/Library/Services路径下的:

> ls ~/Library/Services上传至腾讯云.workflow复制代码

到这里,这个上传图片的automator就算完成了。不足之处就是只能对磁盘上的图片文件进行操作。无法对截图进行操作。其实理论上只要能获取剪贴板的内容,截图上传也是可以实现的。

参考:

转载地址:http://visva.baihongyu.com/

你可能感兴趣的文章
IPTABLES
查看>>
XML的读、写操作
查看>>
OC 省市区划分
查看>>
输出 和*组成的菱形
查看>>
label 和 button下划线
查看>>
关于对strcpy函数的编写与优化
查看>>
PHP 简易留言板制作小实例
查看>>
python之列表、元组、字典
查看>>
linux目录基础知识
查看>>
用户组与权限管理的理解及切换用户相关命令使用
查看>>
vue中使用vue-resource发送ajax请求
查看>>
python join和split和strip用法
查看>>
I/O子零碎的条理构造
查看>>
沉寂许久,来一个工具——supervisor
查看>>
ansible插件之统计任务处理时间
查看>>
新手从Python的哪个版本开始学比较好?
查看>>
linux bash shell中for的用法and示例
查看>>
所有和Java中代理有关的知识点都汇集于此,速进学干货。
查看>>
开机启动的全过程
查看>>
反向教学系列之——PHP入门(一)
查看>>