微信小程序 wx.uploadFile无法上传解决办法
微信安卓客户端无法使用wx.uploadFile上传文件的问题有不少开发者都遇到。
我也因为一直不能解决,硬着头皮提交审核最后被拒(抱着审核者最好用iOS检测的心态,不巧审核我应用的用的是安卓),才尝试使用第三方的手段解决。
最终我是用了七牛第三方存储的方式,将文件直接上传至七牛的储存的空间上再回调使用。
当然像又拍云,万象优图这些第三方存储源都可以采用这种思路。
这里我使用的是七牛华东区的域名https://up.qBox.me。
微信小程序wx.uploadFile采用的是multipart/form-data方式上传,即表单上传。
根据七牛的官方文档说明 http://developer.qiniu.com/docs/ ... up/form-upload.html
主要需要的就是file(文件本身)和token(上传凭证)。
然后在服务端部署获取上传凭证的业务代码,通过wx.request请求获取token。
wx.request({
url: 'https://xxx/token',method: 'POST',data: {},header: {
'content-type':'application/x-www-form-urlencoded'
},success: function(res) {
that.token = res.data; //<a href="https://www.jb51.cc/tag/mo/" target="_blank" class="keywords">默</a>认返回<a href="https://www.jb51.cc/tag/yige/" target="_blank" class="keywords">一个</a>token,赋值给已经有的token<a href="https://www.jb51.cc/tag/shuxing/" target="_blank" class="keywords">属性</a>。这里只是示例,具体根据需求可自行设定。
},fail:function (res) {
console.log(res)
}
})
具体如何部署七牛凭证代码,可参考http://78re52.com1.z0.glb.cloudd ... %9C%8D%E5%8A%A1.pdf
获得凭证后就可以通过wx.uploadFile上传了。具体代码为:
var key = Math.random().toString(36).substr(2); //生成一个随机字符串的文件名
wx.uploadFile({
url: 'https://up.qBox.me',filePath: flie,name: 'file',formData:{
'token': that.token,//刚刚<a href="https://www.jb51.cc/tag/huoqu/" target="_blank" class="keywords">获取</a>的<a href="https://www.jb51.cc/tag/shangchuan/" target="_blank" class="keywords">上传</a>凭证
'key': key//这里是为<a href="https://www.jb51.cc/tag/wenjian/" target="_blank" class="keywords">文件</a>设置<a href="https://www.jb51.cc/tag/shangchuan/" target="_blank" class="keywords">上传</a>后的<a href="https://www.jb51.cc/tag/wenjian/" target="_blank" class="keywords">文件</a>名
},success: function(r){
var data = r.data;//<a href="https://www.jb51.cc/tag/qiniu/" target="_blank" class="keywords">七牛</a>会返回<a href="https://www.jb51.cc/tag/yige/" target="_blank" class="keywords">一个</a>包含hash值和key的JSON字符串
if(typeof data==='string')data = JSON.parse(data.trim());//解压缩
if(data.key){
... //这里就可以直接使用data.key,<a href="https://www.jb51.cc/tag/wenjian/" target="_blank" class="keywords">文件</a>已经<a href="https://www.jb51.cc/tag/shangchuan/" target="_blank" class="keywords">上传</a>成功可以使用了。如果是<a href="https://www.jb51.cc/tag/tupian/" target="_blank" class="keywords">图片</a>也可以直接通过image<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>。
}
},fail:function (res) {
console.log(res)
}
})
最终采用这种方式解决了安卓无法上传文件的问题,当然上传自身服务器的问题还是有待解决。
现在利用第三方图源或存储源是一个普遍的方案,很多存储源例如七牛,又拍云,万象优图都提供了免费的空间供开发者使用。
建议大家也多做这方面的架构和尝试。
感谢阅读,希望能帮助到大家,谢谢大家对本站 的支持!
原文地址:https://www.jb51.cc/weapp/43538.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。