後端用的是Rails ActiveStorage direct_upload
的處理方式, 前端被要求:html
MD5-Base64
校驗值,得到上傳地址;signed_id
做爲文件參數。由於目前開發任務重且緊,暫時略過此部分,只記錄結論要點,後續有時間再補充相關知識前端
MD5
值,但幸運的是,小程序也提供了API來作這件事,請使用:wx.getFileInfo MD5
值轉爲Base64
格式。此處嚴重注意,不能把MD5看成字符串去編碼爲Base64格式,而應該編碼爲Hex,再編碼爲Base64。可以使用CryptoJS
庫,另外須要注意的是,CryptoJS.enc.Base64.stringify
須要的參數是WordArray
格式,而經過CryptoJS.enc.Hex.parse
轉換後的正好是其所須要的參數格式。direct_upload
地址Binary
格式傳給後端,但能夠經過wx.uploadFile上傳文件,經過此接口發送請求,後端可獲取到文件Binary
格式wx.uploadFile
上傳文件,後端提供的上傳文件接口需符合wx.uploadFile
的要求,即請求方式爲POST
, 並指定所需文件key
名(而不是直接要求把Binary
文件丟在請求body
中) FileSystemManager.readFile(Object)
, API文檔點擊此處查看 FileSystemManager.readFile(Object)
的時候,不要指定encoding, 以默認ArrayBuffer的格式獲取文件內容,這樣服務器那邊拿到文件算出的Base64 Encoded MD5
才能與前端傳過去的一致。若指定encoding爲binary,則接口返回結果表示:接收到的文件計算出的Base64 Encoded MD5
與前端這邊所發送的不一致,校驗不經過。看起來服務端那邊要的文件格式,是ArrayBuffer格式,而非binary編碼的文件。