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


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

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

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

復(fù)制代碼
Data = new
        		

網(wǎng)友評(píng)論