首先,使用者的使用場景是使用aliyuncli來完成本地檔案的上傳,在上傳的過程中帶上content-md5,進行檔案的完整性校驗。從上面的連結可以看出,可以使用如下的指令完成這個需求:

(細心的朋友應該發現,aliyuncli的put指令介紹是有問題的,有沒有看出來?對,put後面要跟個"localfile" )
使用者使用的指令如下:
結果,不管“userfile_md5”是什麼,這個localfile都能上傳成功。是不是oss的md5校驗功能不work呢?當然不是哈,細心的朋友應該又發現了,是"--header"這個标簽錯誤了,應該是"--headers",aliyuncli對于錯誤的标簽是不提示錯誤直接忽略的,是以實際上這裡上傳的md5值并沒有寫入oss請求的頭部傳入oss。請千萬注意哦~~
接下來,關于content-md5值如何生成,我們來詳細介紹一下:
關于content-md5是啥,oss官方文檔介紹如下。因為http的首部無法記錄二進制值,是以需要通過base64編碼轉化為字元串。在oss服務端,會使用相同的方法對封包主體進行計算得到對應的值并與封包首部的content-md5進行比較,來校驗資料的有效性。
從字面的解釋很容易了解,md5值的擷取就是兩步:
是以,很容易的使用了最友善、現成的shell指令去做這件事了:
知道上面使用md5和base64指令生成的content-md5有什麼不對麼?
這裡的确有個坑!!!
我們先來研究一下算法的細節:
在上面的shell指令例子中,我們首先使用md5指令對檔案pom.xml的内容進行了md5算法,得到一個128bit的二進制數,可以表示為0xogi4nwyzywzknwy2otrmmzqzmmm5yzq5ywm1n2q3zgyk。然後使用base64進行了編碼得出最後結果,這裡到底哪兒有坑呢?
坑在于:錯誤的base64進行編碼的不是對0xogi4nwyzywzknwy2otrmmzqzmmm5yzq5ywm1n2q3zgyk這個數值,而是對"ogi4nwyzywzknwy2otrmmzqzmmm5yzq5ywm1n2q3zgyk"這串字元串!!
這裡,強調一下,是對128bit進行編碼哦!附一段計算檔案的content-md5的腳本給大家參考一下:
---------------------------------------分割線---------------------------------------------------
<b>誠聘英才</b>
阿裡雲函數服務是一個全新的,支援事件驅動程式設計模式的計算服務。 他幫助使用者聚焦自身業務邏輯,以serverless的方式建構應用,快速的實作低成本,可擴充,高可用的系統,而無需考慮伺服器等底層基礎設施的管理。 使用者能夠快速的建立原型,同樣的架構能随業務規模平滑伸縮。讓計算變得更高效,更經濟,更彈性,更可靠。無論小型創業公司,還是大型企業,都受益其中。
我們的團隊正在迅速擴張,求賢若渴。我們想尋找這樣的隊友:
基本功紮實。既能閱讀論文追蹤業界趨勢,又能快速編碼解決實際問題。
嚴謹的,系統化的思維能力。既能整體考慮業務機會,系統架構,運維成本等諸多因素,又能掌控設計/開發/測試/釋出的完整流程,預判并控制風險。
好奇心和使命感驅動。樂于探索未知領域,不僅是夢想家,也是踐行者。
堅韌、樂觀、自信。能在壓力和困難中看到機會,讓工作充滿樂趣!
如果您對雲計算充滿熱情,想要建構一個有影響力計算平台和生态體系,請加入我們,和我們一起實作夢想!
将你的履歷發送到[email protected],标題 應聘阿裡雲-姓名
如果你有自己的git位址或者個人部落格,将會大大加分哦,一起在郵件中發給我吧~~~