本篇引見怎樣向七牛雲存儲上傳單個文件,限於篇幅,將分紅道理與實踐兩部份。
為便於瀏覽、編寫和實行順序,選定Ruby 2.1.0作為服務端實踐編程言語,視場景須要交叉別的編程東西(如HTML)的對應完成。為防備Ruby語法對明白順序邏輯發生不良影響,會只管將代碼構造成偽碼情勢。
■ 接口情勢
七牛雲挑選HTTP協定作為基準接口情勢,以便完成逾越互聯網的長途挪用,削減防火牆、中心路由器帶來的不測影響。在此基準之上,依據差別的功用完成,會挑選差別的數據構造花樣。本篇及後續文章均假定讀者已熟習HTTP協定。
一般,關於一個HTTP要求報文,有以下三個點須要注重:
- URI與QueryString部份,用於指定功用稱號與相干參數;
- Header部份,用於指定必要的非功用參數;
- Body部份,用於構造上傳數據或別的信息。
相應的,關於一個HTTP相應報文,也有以下三個點須要注重:
- 相應狀況碼,指明服務器的實行效果狀況;
- Header部份,包括有影響緩存、資本元信息等必要的設定值;
- Body部份,關於查詢類要求將返回以JSON花樣構造的狀況和信息數據,關於下載類要求將返回現實數據。
■ /upload接口
本接口完成直觀的單文件直傳功用。為到達最大水平的普適性,運用multipart/from-data花樣構造上傳數據。
一個上傳要求報文最少須要包括以下兩項信息:
- 上傳受權憑據(UploadToken);
- 文件內容(FileContent)與原始文件名(FileName)。
下面是可用的、最小且完全的上傳要求報文模板:
POST / HTTP/1.1
Host: up.qiniu.com
Content-Type: multipart/form-data; boundary=<Boundary>
Content-Length: <MultipartContentLength>
--<Boundary>
Content-Disposition: form-data; name="token"
<UploadToken>
--<Boundary>
Content-Disposition: form-data; name="file"; filename="<FileName>"
<FileContent>
--<Boundary>--
■ 上傳受權憑據
本質上,上傳並不須要受權,無非是把一團數據發送給服務器。但關於用戶而言,任何曉得上傳道理的第三方都能夠濫用該功用,向服務器提交垃圾數據,或是捏造/改動數據,侵犯存儲空間,致使營業風險。因而七牛雲運用上傳受權憑據(稱為UploadToken)來掌握誰在什麼時候之前向哪一個存儲空間上傳文件,防止營業風險。
一個有用的上傳受權憑據由三部份構成:
<AccessKey>:<EncodedSign>:<EncodedPutPolicy>
个中,
-
<AccessKey>
用於指明誰在提議上傳(即開發者賬號); -
<EncodedSign>
是UrlSafe-Base64編碼的上傳戰略的加密簽名,防備信息被捏造或改動。簽名算法將在實踐篇中詮釋; -
<EncodedPutPolicy>
是經由UrlSafe-Base64編碼的上傳戰略信息,用於指明上傳停止時候與目的存儲空間。
■ 上傳戰略
上傳戰略是以JSON花樣構造的數據對象,用於指定上傳要求的各項參數。一個最小的完全示例以下:
{
"scope": "qiniu-ts-demo",
"deadline": 1388506200
}
个中,
-
scope
字段指明目的存儲空間的名字; -
deadline
字段指明上傳受權有用期的停止時候,是一個UNIX時候戳,單元為秒,示例值對應的時候為”2014-01-01 00:10:00″(在Linux上能夠實行date -d"2014-01-01 00:00:00 10 minutes" +"%s"
獲得該值)。
還能夠在上傳戰略中指定某些能夠影響上傳行動的微調參數,後續文章會舉行細節詮釋,此處不再睜開。
■ 我們行進到哪兒了?
至此,讀者應當清晰相識向七牛雲存儲上傳一個文件須要預備哪些必須信息。下一篇文章將舉行編程實踐。
七牛雲存儲 © 2014 簽名-非商業性運用-制止歸納
許可自在轉載,請說明作者及出處。