在验证单文件直传的结果时,已讲解过从七牛云下载文件的最基础方法,即拼出下载URL。针对不一样的场景,还能够给URL附加不一样的指令和相应参数,对原文件进行特殊处理。算法
任何人在任什么时候间均可如下载公开空间里的文件,只要知晓文件的资源名(Key)和所在Bucket,就能够按如下规则构造出URL:编程
http://<Bucket>.qiniudn.com/<Key>
经过为存储空间绑定自定义域名,还能够构造出更贴合应用的URL:segmentfault
http://<Domain>/<Key>
注意:只有在上传时指定合适的MIME类型,浏览器下载文件后才会正确地进行处理。浏览器
有时候,对原文件进行必定处理后再下载,会带来很多便利,好比直接下载大型图片的缩略图等。七牛云存储提供丰富的数据处理指令,能处理各式各样的资源(图片、音频、视频、办公文档等等)。七牛云存储
按照如下规则构造URL便可触发同步式数据处理:缓存
http://<Bucket>.qiniudn.com/<Key>?<Fop>
注意:ruby
具体数据处理指令和参数规格将在后续文章中展开介绍。函数
与公开空间相反,私有空间中的文件只容许特定的人在特定的时间段内访问。这是经过在URL上附加下载受权凭证明现的,规则以下:ui
http://<Bucket>.qiniudn.com/<Key>?e=<deadline>&token=<DownloadToken>
其中,编码
下载URL的签发算法以下所示:
#!/usr/bin/env ruby # encoding : utf-8 # download_token.rb require 'base64' require 'openssl' def download_url(access_key, secret_key, url, expires) # 计算受权有效期截止时间,UNIX时间戳格式 deadline = (Time.now() + expires).tv_sec() # 将截止时间做为e参数的值,附加到URL上 new_url = url if new_url =~ /[?]/ then new_url += "&e=#{deadline}" else new_url += "?e=#{deadline}" end # 使用SHA1做为HASH函数,生成签名 sign = OpenSSL::HMAC.digest( 'sha1', secret_key, new_url ) # 对签名作UrlSafe-Base64编码 encoded_sign = Base64.urlsafe_encode64(sign) # 拼出下载受权凭证,以“:”做为分隔符 token = "#{access_key}:#{encoded_sign}" # 拼出完整URL new_url += "&token=#{token}" return new_url end # download_url ACCESS_KEY = 'MY_ACCESS_KEY' # 使用时请更换成真实的AccessKey SECRET_KEY = 'MY_SECRET_KEY' # 使用时请更换成真实的SecretKey EXPIRES = 600 url = 'http://private.qiniudn.com/test.txt' new_url = download_url(ACCESS_KEY, SECRET_KEY, url, 600) puts new_url # 输出示例:http://private.qiniudn.com/test.txt?e=1389852108&token=MY_ACCESS_KEY:MAso7VUwAHwXNHghlDSrPXqpnYM=
私有文件一样能够先通过云处理再下载,URL构造规则以下:
http://<Bucket>.qiniudn.com/<Key>?<Fop>&e=<deadline>&token=<DownloadToken>
要点是将e参数和token参数按顺序放在整个URL的最后。
为七牛云中的资源构造下载URL是很容易的,构造规则简单好记,使用简便。下一章将介绍相关的编程实践内容。
七牛云存储 © 2014 署名-非商业性使用-禁止演绎
容许自由转载,请注明做者及出处。