在考證單文件直傳的效果時,已解說過從七牛雲下載文件的最基本要領,即拼出下載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 簽名-非商業性運用-制止歸納
許可自在轉載,請說明作者及出處。