在做了一系列调查之后,目前为止暂未发现有相关的文章,在此简单记录一下解决此问题的步骤,造福来人。
本人的解决方案参考了百度云BOS官方文档,地址如下:
https://cloud.baidu.com/doc/BOS/API.html#Object.E7.9B.B8.E5.85.B3.E6.8E.A5.E5.8F.A3
使用wx.uploadFile接口上传。
其中,需要特别关注的是:
百度云通过Post方式上传Object,要求必须存在Policy,且Policy编码格式为UTF-8.Policy的格式如下:
var policy = '{"expiration":"2018-05-01T12:00:00Z","conditions":[{"bucket":"你的bucket名称"},{"key":"文件保存在BOS中的文件名"}]}'
var base64 = base64.encode(policy)
通过在小程序中引入Base64.js,可以轻松的将Policy转为Base64编码。接下来需要将这个Base64编码通过HmacSHA256加密。
signature = CryptoJS.HmacSHA256("之前的base64编码字符串", "百度云的SK").toString(CryptoJS.enc.Hex)
此时已经得到了百度云上传需要的签名。
接下来通过调用微信小程序提供的API wx.uploadFile就可以了,代码如下:
wx.uploadFile({ url: 'https://zhiyu.bj.bcebos.com', filePath: '拍照。或者通过chooseImage,chooseVideo返回的完整路径', name: 'file', // 注意:这个name一定不要更改,一定不要更改,一定不要更改 formData:{ accessKey:'百度云提供的ak', policy:'上面提到的base64字符串', signature:'上面提到的signature签名', key: '文件保存在BOS中的文件名', // 注意:这个key必须与policy中的key保持一致,否则会报错 'Content-Type':'image/png' // 可以不指定,BOS会自动判断 }, success:function(res){ var data = res.data console.log(res); }, fail:function(res){ console.log(res) } })
如此流程便可以轻松的将拍照和选择的小视频从微信小程序端直接上传到百度云了。
详细的代码请下载附件查看,附件中包含了拍照,录小视频,以及拍照上传到百度云的代码。
附件:微信小程序 如何上传音视频到百度云Bos cloud BCE