前言
之前写过一篇微信JS-SDK的使用方法,可进行参考
https://www.cnblogs.com/fozero/p/10256862.html
配置并调用公众号接口权限
1、配置权限微信公众号接口,添加如下权限
jsApiList: [
'chooseImage',
'getLocalImgData',
]
2、拍照或选取图片,拿到base64位图片地址
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
调用之前需在jsApiList[]中添加getLocalImgData权限
添加之后还是无法获取权限,后发现微信js版本问题(在jweixin1.0.0无法使用)
替换使用最新版本
http://res2.wx.qq.com/open/js/jweixin-1.4.0.js
使用阿里oss浏览器端sdk上传图片
3.1、文档查看
https://www.alibabacloud.com/help/zh/doc-detail/32069.htm?spm=a2c63.p38356.a3.7.26855ac51uabIJ
https://github.com/ali-sdk/ali-oss
3.2、浏览器引用
<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对象格式
// 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在前端对base64、file、Blob进行互相转换
1、base64、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);
});
2、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 });
}
function blobToDataURL(blob, callback) {
let a = new FileReader();
a.onload = function (e) { callback(e.target.result); }
a.readAsDataURL(blob);
}
微信公众号通过图片选取接口上传到阿里oss的更多相关文章
-
利用python 实现微信公众号群发图片与文本消息功能
在微信公众号开发中,使用api都要附加access_token内容.因此,首先需要获取access_token.如下: #获取微信access_token def get_token(): paylo ...
-
PHP微信公众号JSAPI网页支付(上)
一.使用场景以及说明 使用场景:商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调用微信支付完成下单购买的流程. 说明:1.用户打开图文消息或者扫描二维码,在微信内置浏览器打开网 ...
-
图片的URL上传至阿里云OSS操作(微信小程序二维码返回的二进制上传到OSS)
当我们从网络中获取一个URL的图片我们要存储到本地或者是私有的云时,我们可以这样操作 把url中的图片文件下载到本地(或者上传到私有云中) public String uploadUrlToOss ...
-
Java处理微信公众号文章图片不显示微信
http://blog.csdn.net/just4you/article/details/52933620
-
个人微信公众号搭建Python实现 -个人公众号搭建-永久素材管理(14.3.5)
@ 目录 1.说明 2.上传素材 3.获取素材列表 关于作者 1.说明 个人微信公众号开发的功能有限,因为很多权限没有,但支持上传永久素材,具体查看微信公众号文档 这里的请求都要将本地IP地址放到微信 ...
-
.net微信公众号开发——基础接口
作者:王先荣 本文讲述微信公众号开发中基础接口的使用,包括以下内容: (1)获取许可令牌(AccessToken): (2)获取微信服务器地址: (3)上传.下载多媒体文件: ...
-
使用web api开发微信公众号,调用图灵机器人接口(二)
此文将分两篇讲解,主要分为以下几步 签名校验; 首次提交验证申请; 接收消息; 被动响应消息(返回XML); 映射图灵消息及微信消息; 此篇为第二篇. 被动响应消息(返回XML) 上一篇中,我们已经可 ...
-
Chrome浏览器保存微信公众号文章中的图片
用chrome浏览器打开微信公众号文章中时,另存为图片时保存的是640.webp,不是图片本身,用IE则没有此问题.大部分chrome插件也无法保存图片. 经过多番尝试,找到一款插件可以批量保存微信公 ...
-
spring-boot-route(二十三)开发微信公众号
在讲微信公众号开发之前,先来大概了解一下微信公众号.微信公众号大体上可以分为服务号和订阅号,订阅号和服务号的区别如下: 服务号可以申请微信支付功能. 服务号只能由企业申请,订阅号可以有企业或个人申请. ...
随机推荐
-
MVC丶 (未完待续&#183;&#183;&#183;&#183;&#183;&#183;)
希望你看了此小随 可以实现自己的MVC框架 也祝所有的程序员身体健康一切安好 ...
-
Evolutionary Computing: [reading notes]On the Life-Long Learning Capabilities of a NELLI*: A Hyper-Heuristic Optimisation System
resource: On the Life-Long Learning Capabilities of a NELLI*: A Hyper-Heuristic Optimisation System ...
-
移动端WEB开发备忘录
META相关 1. 添加到主屏后的标题(IOS) <meta name="apple-mobile-web-app-title" content="标题" ...
-
Stanford CS1 Compilers PA2J notes
[题记·碎碎念] 斯坦福这门Compilers原本放在Coursera上,当年错过档期很是可惜,后来发现他们自己的MOOC站放了一个self paced版本,真是普大喜奔,趁着放假有空学学. 这门课的 ...
-
Windows平台下使用ffmpeg和segmenter实现m3u8直播点播
1.安装windows media service 实现 流媒体服务器功能 2.windows media编码器 实现 直播推流 3.使用 vlc 将 mms://127.0.0.1/live ...
-
poj 2104 K-th Number(可持久线段树)
K-th Number 持久化:http://www.cnblogs.com/tedzhao/archive/2008/11/12/1332112.html 结构:http://www.docin.c ...
-
写给自己看的Linux运维基础(三) - Mono
如果使用ubuntu,可使用apg-get安装完mono,xsp,mod_mono,我的yum源并没有找到mono可安装,网上也没找到CentOS的源,最后选择下载编译安装. Stackoverflo ...
-
Spring3系列1 -- HelloWord例子
Spring3系列1-HelloWord例子 一. 环境 spring-framework-3.2.4.RELEASE jdk1.7.0_11 Maven3.0.5 eclipse-jee- ...
-
《java版进制转换》
import java.util.Scanner; class 十进制转成十六进制_2 { public static void main(String[] args) { int num = 0; ...
-
Java操作zip压缩和解压缩文件工具类
需要用到ant.jar(这里使用的是ant-1.6.5.jar) import java.io.File; import java.io.FileInputStream; import java.io ...