后端用的是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编码的文件。