在验证单文件直传的结果时,已讲解过从七牛云下载文件的最基础方法,即拼出下载URL。针对不同的场景,还可以给URL附加不同的指令和相应参数,对原文件进行特殊处理。
■ 下载公开文件
任何人在任何时间都可以下载公开空间里的文件,只要知晓文件的资源名(Key)和所在Bucket,就可以按以下规则构造出URL:
http://<Bucket>.qiniudn.com/<Key>
通过为存储空间绑定自定义域名,还可以构造出更贴合应用的URL:
http://<Domain>/<Key>
注意:只有在上传时指定合适的MIME类型,浏览器下载文件后才会正确地进行处理。
■ 下载经过云处理的公开文件
有时候,对原文件进行一定处理后再下载,会带来不少便利,比如直接下载大型图片的缩略图等。七牛云存储提供丰富的数据处理指令,能处理各式各样的资源(图片、音频、视频、办公文档等等)。
按照以下规则构造URL即可触发同步式数据处理:
http://<Bucket>.qiniudn.com/<Key>?<Fop>
注意:
- 这样触发的云处理是同步执行的,当结果未被缓存时,会有些许延迟;
- 处理好的结果会被自动缓存在七牛云中,加快下载速度;
- 建议用于非持久型热点资源,节省存储空间和存储费用。
具体数据处理指令和参数规格将在后续文章中展开介绍。
■ 下载私有文件
与公开空间相反,私有空间中的文件只允许特定的人在特定的时间段内访问。这是通过在URL上附加下载授权凭证实现的,规则如下:
http://<Bucket>.qiniudn.com/<Key>?e=<deadline>&token=<DownloadToken>
其中,
- e字段指定下载授权有效期的截止时间,是一个UNIX时间戳,单位为秒;
- token字段指定下载授权凭证,必须作为下载URL的最后一个参数。
下载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 署名-非商业性使用-禁止演绎
允许自由转载,请注明作者及出处。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。