599錯誤處理
如果在與七牛的交互中出現http狀態碼為599的錯誤,一句話,不要猶豫,直接聯系七牛技術支持。七牛的文檔也在很多地方提到這個錯誤,都是指導大家去聯系技術支持的。筆者是在分塊上傳后的mkfile調用時出現的,聯系技術支持后,說是調整了一下,讓我重試。后來就好了…
分塊上傳無法從回調中獲得文件的原始名
簡單上傳采用的是multipart/form-data方式上傳,七牛服務端能夠從請求中獲得文件的原始名,并支持使用魔法變量$(fname)回調業務服務器。不過當使用分片上傳的時候情況有所不同。分片上傳需要在最后調用mkfile,來將分片拼接起來。但是,mkfile接口支持普通的請求,并沒有附帶文件名,所以七牛也就無法獲得文件名,此時從$(fname)中是取不到文件名的。這個問題我也向七牛技術支持提交了問題,得到的結果是使用自定義變量mkfile支持將自定義變量放在url中,回調的時候自定義變量可以傳遞給業務服務器。
慎用圖片預處理
七牛云支持很多對文件的預處理,其中最常用的應該就是圖片預處理了,可以對圖片的大小做變換等。七牛推薦使用GET的方式直接指定圖片處理結果的url,像這樣:
http://qiniuphotos.qiniudn.com/gogopher.jpg?imageView2/1/w/200/h/200
處理后的圖片會自動緩存,用戶不用關心,只要每次訪問都用這個url就行了。然而,筆者在開始的時候,為了保持與其他文件形式統一的處理方法,對圖片使用了預處理(因為視頻什么的只能預處理),即在token中指定了預處理。此時問題出現了,從后臺的日志看到,圖片的預處理通知回調竟然比正常的上傳成功回調還要快!這就導致預處理結果到來之前,我的業務服務器的數據庫中還沒有這個圖片,無法保存預處理結果了。所以推薦還是使用url直接處理,對圖片要慎用預處理
視頻文件無法快進播放
通常用戶在觀看視頻的時候都會根據自己的喜好,快速將視頻定位到指定的時間播放。實現這個功能,需要視頻本身有關鍵幀信息、服務端需要支持關鍵幀播放請求。
但是筆者發現,在使用七牛云轉化后的視頻,這樣做是無效的。于是咨詢技術支持,得到的答案是:轉化的文件是具有關鍵幀的,但七牛使用CDN加速,所以關鍵幀請求需要CDN的支持,如果想要用這個功能的話,需要單獨聯系銷售或技術支持在CDN上配置,而且時間比較長。筆者聯系了銷售和技術支持,說是幫我配置,但到現在還沒有搞定,因為最近這個也不是特別重要,所以也沒有跟下去。
Callback校驗
這是可選的一個步驟。由于七牛云會在上傳完成之后回調業務服務器,所以理論上說業務服務器需要校驗這個回調的合理性。原理在七牛的文檔中有,需要用到HMAC-SHA1簽名函數。但是七牛的sdk中沒有提供直接的方式來做校驗,在研讀文檔、多次失敗和查看sdk源碼后,筆者終于校驗成功了。關鍵的分歧在于,文檔中的這句話:
獲取明文:data = Request.URL.Path +”/n” +Request.Body
這里的Request.URL.Path是否包含Querystring?答案是包含的!下面是筆者C#服務端的校驗代碼,使用的是ASP.NET Web Api:
新聞熱點
疑難解答