以前写过一篇微信JS-SDK的使用方法,可进行参考
http://www.javashuo.com/article/p-ypfurcjs-ds.htmlhtml
一、配置权限微信公众号接口,添加以下权限前端
jsApiList: [ 'chooseImage', 'getLocalImgData', ]
二、拍照或选取图片,拿到base64位图片地址git
wx.chooseImage({ count: 1, // 默认9 sizeType: ['original', 'compressed'], // 能够指定是原图仍是压缩图,默认两者都有 sourceType: ['album', 'camera'], // 能够指定来源是相册仍是相机,默认两者都有 success: function (res) { // var localIds = res.localIds; // 返回选定照片的本地ID列表,localId能够做为img标签的src属性显示图片 // 获取本地图片 wx.getLocalImgData({ localId: res.localIds[0], // 图片的localID success: function (res) { var localData = res.localData; // localData是图片的base64数据,能够用img标签显示 } }); } });
这里有个坑:
微信公众号选择图片显示报错wx.getLocalImgData is not a function
github
调用以前需在jsApiList[]中添加getLocalImgData权限canvas
添加以后仍是没法获取权限,后发现微信js版本问题(在jweixin1.0.0没法使用)浏览器
替换使用最新版本安全
http://res2.wx.qq.com/open/js/jweixin-1.4.0.js
3.一、文档查看
https://www.alibabacloud.com/help/zh/doc-detail/32069.htm?spm=a2c63.p38356.a3.7.26855ac51uabIJ
https://github.com/ali-sdk/ali-oss服务器
3.二、浏览器引用微信
<script src="http://gosspublic.alicdn.com/aliyun-oss-sdk-6.1.0.min.js"></script>
let client = new OSS({ accessKeyId: result.AccessKeyId, accessKeySecret: result.AccessKeySecret, stsToken: result.SecurityToken,//安全性考虑,建议经过服务器获取该token endpoint: '<oss endpoint>', bucket: '<Your bucket name>' }); //storeAs表示上传的object name , file表示上传的文件 client.multipartUpload(storeAs, file).then(function (result) { console.log(result); }).catch(function (err) { console.log(err); });
multipartUpload第二个参数支持blob和file对象,这里须要注意的是咱们在微信公众号拿到的图片地址是base64位,上传以前将其转换成blob或者file对象格式app
// base64转blob function dataURLtoBlob(dataurl) { var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n); } return new Blob([u8arr], { type: mime }); } //base64转file对象 function dataURLtoFile(dataurl, filename) { var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n); } return new File([u8arr], filename, { type: mime }); }
坑:
如今最新sdk版本是6.1.0,能够经过https://github.com/ali-sdk/ali-oss/tree/master/dist获取,因为是网上找的代码,版本缘由
以前版本获取oss对象的方式是new OSS.Wrapper ,最新版本已换成new OSS,传递参数也变了,region已经换成endpoint
let client = new OSS.Wrapper({ region: 'oss-cn-hangzhou', accessKeyId: '', accessKeySecret: '', bucket: '' })
<img style="width:300px;" class="J_img" src="" alt=""> <div class="J_upload">上传图片</div> // 图片上传 $('.J_upload').click(function () { // 选择手机图片 wx.chooseImage({ count: 1, // 默认9 sizeType: ['original', 'compressed'], // 能够指定是原图仍是压缩图,默认两者都有 sourceType: ['album', 'camera'], // 能够指定来源是相册仍是相机,默认两者都有 success: function (res) { // var localIds = res.localIds; // 返回选定照片的本地ID列表,localId能够做为img标签的src属性显示图片 // 获取本地图片 wx.getLocalImgData({ localId: res.localIds[0], // 图片的localID success: function (res) { var localData = res.localData; // localData是图片的base64数据,能够用img标签显示 let client = new OSS({ accessKeyId: '', accessKeySecret: '', // stsToken: result.SecurityToken, endpoint: '', bucket: '' }); var fileName = "test/test.jpg" var _file = dataURLtoFile(localData, fileName); var _blob = dataURLtoBlob(localData); client.multipartUpload(fileName, _blob) .then(function (result) { $('.J_img').attr('src', 'https://diankr.oss-cn-beijing.aliyuncs.com/' + result.name+'?i='+Math.random()); }).catch(function (err) { console.log('err', err); }); // base64转blob function dataURLtoBlob(dataurl) { var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n); } return new Blob([u8arr], { type: mime }); } //base64转file对象 function dataURLtoFile(dataurl, filename) { var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n); } return new File([u8arr], filename, { type: mime }); } } }); } }); })
使用js在前端对base6四、file、Blob进行互相转换
一、base6四、file对象互转
https://www.cnblogs.com/MainActivity/p/8550895.html function dataURLtoFile(dataurl, filename) {//将base64转换为文件 var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while(n--){ u8arr[n] = bstr.charCodeAt(n); } return new File([u8arr], filename, {type:mime}); } //将图片转换为Base64 function getImgToBase64(url,callback){ var canvas = document.createElement('canvas'), ctx = canvas.getContext('2d'), img = new Image; img.crossOrigin = 'Anonymous'; img.onload = function(){ canvas.height = img.height; canvas.width = img.width; ctx.drawImage(img,0,0); var dataURL = canvas.toDataURL('image/png'); callback(dataURL); canvas = null; }; img.src = url; } getImgToBase64('img/test.png',function(data){ var myFile = dataURLtoFile(data,'testimgtestimgtestimg'); console.log(myFile); });
二、Base6四、 Blob互转
function dataURLtoBlob(dataurl) { var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n); } return new Blob([u8arr], { type: mime }); } function blobToDataURL(blob, callback) { let a = new FileReader(); a.onload = function (e) { callback(e.target.result); } a.readAsDataURL(blob); }