七牛对象存储的使用

兼说在jekyll页面中添加照片引用

Jekyll个人网页是个好技术,github.com是个好网站,不过存储容量和流量的限制是个头痛的事情,当然,也在情理之中。
好在我们生于“云”的时代,有很多办法来扩展我们的世界。在引用图片方面,主要的要求就是服务商可以提供外链。由于在国内,我们的选择少了一些,不过还是有几个优选的:

  • 百度图片,网址是https://timgsa.baidu.com,图片可以外链,缺点是路径太长,在Markdown源文件中看起来很丑也难操作。另外图片来源主要靠搜索,难以表达自己的精确要求。
  • 新浪图片,在微博中上传的图片就可以使用,外链的地址是:http://sinaimg.cn。当然对于微博用户来说,一堆跟微博本身毫无关关联的图片看起来有点让人费解,不过用起来还是很好用的。
  • 七牛云,也是个良心商家,至少当前还是,只需要实名认证一下就有免费账号可以用。而且做为一个开发者的服务平台,提供了丰富的API来进行自动化的管理,支持图片、视频等一切可存储的对象。这也是我当前的主存站和今天的主题。

七牛的注册、认证这里就不说了,控制台的网址是https://portal.qiniu.com/。关键要说的是对于普通人员用起来感觉困难的地方:

  • 如果你是程序员,当然最好的办法是根据api使用文档编写自己的接口,完成彻底的自动化工作。api文档地址是:https://developer.qiniu.com/kodo
  • 如果你懒得自己写,七牛有一组用这些API开发的工具供你选择,这些工具包括Windows之下的同步上传工具,命令行的QShell,还有另外两款辅助工具和迁移工具。我们今天的重点说QShell,说明及下载地址是:https://developer.qiniu.com/kodo/tools/1302/qshell
  • 首先在七牛网页控制台个人中心->秘钥管理中查询自己的AK和SK,这两个秘钥可好好记录下来。
  • 在控制台添加对象存储功能,添加时要填写一个存储的名字还有选一个服务器地理位置。添加完成从控制台左侧选择对象存储图标,屏幕右上角的位置会出现一个为你临时生成的域名xxxxx.bkt.clouddn.com,将来你存储到七牛云的文件,可以使用这个域名访问。七牛云专门说了这个域名是临时测试使用的,有访问次数和流量的限制,不过据说对于个人博客来说一般都够用了。不够用的可以根据说明捆绑域名。
  • 下载的qshell改一个短一点你喜欢的名字,我就直接叫qshell了,使用chmod +x qshell设置执行权限,然后移动到/usr/local/bin文件夹以便随时调用。
  • 第一次使用首先执行qshell account 你的ak 你的sk,这回在~/.qshell/生成一个文件account.json文件,其中保存了你的账户信息,以后执行qshell各项功能,就不需要再次登陆了。
  • 在电脑本地选择一个文件夹作为对应云端存储的本地空间,为了说明方便,我们假定是~/fileStorage/,在之下可以建立自己的目录结构并存储自己的各项文件,将来上传后,~/fileStorage/下面保存的文件,就对应到你七牛测试域名的根目录。随后在你的工程下面建立一个upload.conf文本文件,内容为:
    {
    //使用时请删除这些注释行
    //本地存储路径
    "src_dir" : "~/fileStorage",
    "bucket" : "你的存储名",
    //下面几项不用解释了吧,懂的就懂了,不懂翻译成中文还是不明白
    "check_hash"	:	true,
    "check_exists"  :   true,
    "check_size"    :   true,
    "rescan_local"  :   true,
    //上传时保持目录结构
    "ignore_dir" : false
    }
    
  • 假设你有一个文件,~/fileStorage/abc/def.jpg,上传后,使用http://xxxxx.bkt.clouddn.com/abc/def.jpg就能访问到。在你的jekyll文章中,使用![](http://xxxxx.bkt.clouddn.com/abc/def.jpg)可以把这张图片插入到你的文章中。
  • 上传的命令为:qshell qupload upload.conf,我一般把git的操作及qshell操作一起写入一个脚本,每次写完执行一次就同时完成了文章的上传和图片的上传。不怕献丑,贴出来我的脚本给你参考一下:
#!/bin/bash

git add . 
git commit -m "$1"
git push
qshell qupload qshellupload.conf
#此外,qshell还可以增加一个线程数参数,来并行上传加快速度,比如下面这条8线程上传:
#qshell qupload 8 qshellupload.conf