客服稱OSS不限制上下行流量,而且不占用ECS帶寬,所以將靜態(tài)文件存放在OSS是個不錯的選擇。除了放置站點引用的資源文件外,主要用于用戶文件的上傳。阿里云提供了Web端直傳方式,文件不經(jīng)過站點服務(wù)器,不影響站點的性能和帶寬。真正擼代碼時,遇到了不少坑,而官方文檔秉承阿里一貫的程序員風(fēng)格,天馬行空毫不連貫,博主東拼西湊才理順各細節(jié),關(guān)鍵點記錄如下,供需要的朋友參考。


阿里官方?jīng)]有提供.NET的demo,找到Post Object,該文檔描述了提交的各參數(shù)。進行Post操作要求對bucket有寫權(quán)限,如果bucket為public-read-write,可以不上傳簽名信息,否則要求對該操作進行簽名驗證。與Put操作不同,Post操作使用AccessKeySecret對policy進行簽名計算出簽名字符串作為Signature表單域的值,OSS會驗證該值從而判斷簽名的合法性(不需要遵循用戶簽名驗證(Authentication)的規(guī)定,另外在header或url中加上簽名)。policy又是啥呢?Post請求的policy表單域用于驗證請求的合法性。 policy為一段經(jīng)過UTF-8和base64編碼的JSON文本,聲明了Post請求必須滿足的條件(文件大小、一些http頭等,還有該條件的過期時間)。雖然對于public-read-write的bucket上傳時,post表單域為可選項(其它情況,因為需要簽名驗證,所以是必選項),也強烈建議使用該域來限制Post請求。

so,第一步,構(gòu)造Post條件,對于不同bucket,可以有不同的條件,可以寫在web.config中,如果經(jīng)常變動,也可以寫在數(shù)據(jù)庫中方便管理。

 然后,給前端提供一個獲取policy的接口,代碼就不貼了,使用官方提供的SDK,很簡單。這里假設(shè)接口名稱為GetPolicyForOSSUpload,返回結(jié)果是:

復(fù)制代碼
Data = new
        		

網(wǎng)友評論