资讯专栏INFORMATION COLUMN

利用七牛 qshell 和 Automator 打造快捷上传服务

cyqian / 1173人阅读

摘要:运行成功之后粘贴板中应该会有如下内容到这里,只剩下下载安装就大功告成这里还用到了修改权限命令,有兴趣的话可以查看我另一篇文章服务器搭建基础知识。

来源

早前订阅了一个图片上传工具 iPic,单单就图片上传这一功能来说它无疑是非常优秀的。无奈我有的时候要上传一些非图片小文件,虽然这个只是个小功能,一个小小的脚本就可以做到,但是想想用到这个功能的时候还要打开terminal,emmmm…(纵然本人身为程序员terminal一直不会关)。

然后某一天看到了七牛的SDK有命令行工具 qshell (七牛云有免费对象存储空间),而 macOS 的 Automator 又是支持运行 shell 脚本的,再加上早前利用 Automator 做过一项彩色图转灰度图的功能,知道这些功能是可以做成系统服务的…...我有一个大胆的想法。

实践想法

打开 Automator 选择服务

然后选择 运行 Shell 脚本 拖拽到右边,程序可以选 finder 或者 任何应用程序

shell 类型务必选择 /bin/bash !即使你安装了 zsh 也不要用!

之前在服务器上安装了zsh ,结果 PM2 部署项目死活不成功,找了一圈也没答案,大概没有我这么无聊的人,把服务器配置成 zsh ?

code

这里我们先查阅一下 qshell 上传文件的文档和使用示例:

# 上传本地文件/Users/jemy/Documents/qiniu.jpg到空间if-pbl里面
$ qshell fput if-pbl qiniu.jpg /Users/jemy/Documents/qiniu.jpg

这里主要是对 Key 的构造,即上传文件在七牛存储中的文件名,我选择的构造规则是[日期]-[时间戳MD5值]-[文件名],可以有效规避文件名重复的问题,完整代码如下:

urlencode() {
  local length="${#1}"
  for (( i = 0; i < length; i++ )); do
    local c="${1:i:1}"
    case $c in
      [a-zA-Z0-9.~_-]) printf "$c" ;;
    *) printf "$c" | xxd -p -c1 | while read x;do printf "%%%s" "$x";done
  esac
done
}

for f in "$@"

do
    if [ -f $f ]; then
        Key=$(date +%F)-$(date +%s | md5 | head -c 8)-$(basename $f)
        /usr/local/bin/qshell fput static "$Key" $f
        link="//static.domain.me/$(urlencode $Key)"
        if [ "$links" == "" ]; then
            links=$link
        else
            links=$links"
"$link
        fi
    fi
done

echo -ne $links | pbcopy

这里需要解释的几个点:

pbcopy 命令会把 echo 中的内容放置到系统粘贴板中;

关于 urlencode :在上传测试过程中,发现一旦选择的文件列表中含有中文命名的文件,就会导致文件链接构造异常,最后也到不了系统粘贴板中,具体原因不明,所以在构造链接时做一次编码就好,反正浏览器本身也会对编码的链接自行识别;

if [ -f $f ] 是为了判断文件与文件夹;

考虑到MD5值太长,我只截取了8位;

echo 的两个参数可以参考该文;

请把资源链接的域名改成你对应的。

test

写完脚本之后可以运行测试,Automator 界面右上角有一个运行,在运行之前我们先模拟选中了一些文件。

添加文件:

测试的时候请把 /usr/local/bin/qshell fput static "$Key" $f 删除。

运行成功之后粘贴板中应该会有如下内容:

//static.domain.me/2017-10-16-9f26b83d-img2%e7%9a%84%e5%89%af%e6%9c%ac.jpg
//static.domain.me/2017-10-16-9f26b83d-image.png

到这里,只剩下下载安装 qshell 就大功告成:

$ mv ~/Downloads/qshell /usr/local/bin
$ chmod 755 /usr/local/bin/qshell
$ qshell account AccessKey SecretKey

这里还用到了修改权限命令,有兴趣的话可以查看我另一篇文章服务器搭建—Linux基础知识。

完结

现在你可以刚才测试时添加的 finder 去掉,命名并保存,就可以像这样使用:

下面可以完善一下上传结束后的通知:

除此之外,你还可以在系统设置中为该服务添加快捷键,好了,我去取消订阅 iPic 了......

还有值得一提的是,七牛的对象存储免费额度还挺大的,拿来做私家图床还是很不错的,我还配置了CDN美滋滋?。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/10978.html

相关文章

  • 定时备份 MySQL 并上传七牛

    摘要:常见的数据存储方式有,本机存储上传到远程服务器云存储如阿里云七牛云存储等甚至本地也行。那我们可以尝试,写个脚本定时备份数据库,然后自动上传到指定服务器或云存储。这里,我们说说服务器下备份并上传到七牛云存储的方式。 多数应用场景下,我们需要对重要数据进行备份、并放置到一个安全的地方,以备不时之需。常见的 MySQL 数据备份方式有,直接打包复制对应的数据库或表文件(物理备份)、mysql...

    30e8336b8229 评论0 收藏0
  • 一个命令完成[打包+同步七牛cdn+上传服务器]

    摘要:实现一个命令完成打包同步上传服务器说明由于我们用的七牛云存储,所以也是走的七牛,所以并不适用于其他的,但是思路可以借鉴打包打包目前我这边用的是,网上已经有很多文章了,这里就不作过多阐述了,只是说一下这个参数,如果要做同步肯定是要配置这个参 webpack+gulp+qshell+npm-scripts实现一个命令完成[打包+同步cdn+上传服务器] 说明 由于我们用的七牛云存储,所以c...

    张春雷 评论0 收藏0
  • 一个命令完成[打包+同步七牛cdn+上传服务器]

    摘要:实现一个命令完成打包同步上传服务器说明由于我们用的七牛云存储,所以也是走的七牛,所以并不适用于其他的,但是思路可以借鉴打包打包目前我这边用的是,网上已经有很多文章了,这里就不作过多阐述了,只是说一下这个参数,如果要做同步肯定是要配置这个参 webpack+gulp+qshell+npm-scripts实现一个命令完成[打包+同步cdn+上传服务器] 说明 由于我们用的七牛云存储,所以c...

    ixlei 评论0 收藏0
  • 关于七牛云正确使用姿势探索

    摘要:,在后续测试时遇到一个诡异,当文件过大时,任务脚本上传到七牛云失败。当我遇到大文件无法上传到七牛云时,断点调试到这里,发现返回的是。后来还真被我找到了,七牛云官方提供一个脚本工具。 业务场景 需求 我们项目有一个文件上传需求,需要从客户端上传到七牛云的对象存储和自己的应用服务器上。这里使用七牛云主要是实现下载分发。应用服务器需要留一份是因为后续需要做文件分析(并且是上传后需要立马分析出...

    3fuyu 评论0 收藏0
  • 打造属于你自己的instagram!全栈项目

    摘要:简介小伙伴们,如果觉得本文还不错,记得点个赞或者给个,你们的赞和是我编写更多更丰富开源项目的动力地址技术栈全家桶前后端分离开发模式,前端项目与后端项目属于不同的工程前端工程后端工程注此项目纯属个人瞎搞,与无任何关系。 简介 Hello 小伙伴们,如果觉得本文还不错,记得点个赞或者给个 star,你们的赞和 star 是我编写更多更丰富开源项目的动力!GitHub 地址 技术栈 rea...

    levius 评论0 收藏0

发表评论

0条评论

cyqian

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<