在验证单文件直传的结果时,已讲解过从七牛云下载文件的最基础方法,即拼出下载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 署名-非商业性使用-禁止演绎

允许自由转载,请注明作者及出处。


无锋之刃
135 声望27 粉丝

七牛云存储 技术支持


引用和评论

0 条评论