参考文章:
1,实现图片资源(base64,blob)的互转,及上传到服务器 https://blog.csdn.net/wucong60/article/details/81289227
2,base64和Blob相互转化:https://www.cnblogs.com/jiujiaoyangkang/p/9396043.html
3,微信公众号上传图片解析: https://blog.csdn.net/qinghechaoge/article/details/79838793
4,直传阿里云OSS:https://www.cnblogs.com/fozero/p/10517442.html
5,微信公众号图片上传,经微信:https://www.cnblogs.com/mark8080/p/8707485.html
1,wx.chooseImage选择图片,并将base64的图片转化为file类型,待上传到服务器(不上传微信服务器)
wx.chooseImage({
count: imageLength - imageUrlList.length, //上传图片的张数,最多上传9张,这里设置6张
sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
success: function (res) {
//限制选择的图片
var sum = res.localIds.length + imageUrlList.length;
if (sum > 6) {
$.MsgBox.Alert("最多只能上传6张图片");
return;
}
//选择好图片后,把localId进行存储
for (var i = 0; i < res.localIds.length; i++) {
imageUrlList.push(res.localIds[i]);
}
//渲染选择的图片
showImg(imageUrlList);
//转化base64为file
WxImageToFile();
},
fail: function (res) {
alert(JSON.stringify(res));
}
});
2,接收wx.getLocalImgData返回的base64图片并进行处理【安卓和苹果,base64有大坑】
//获取base64格式的图片,并转为file文件,进行上传
function WxImageToFile() {
for (let i = 0; i < imageUrlList.length; i++) {
wx.getLocalImgData({
localId: imageUrlList[i], //需要上传的图片的本地ID,由chooseImage接口获得
success: function (res) {
let localData = res.localData;
let imageBase64 = '';
if (localData.indexOf('data:image') === 0) {
//苹果的直接赋值,默认生成'data:image/jpeg;base64,'的头部拼接
imageBase64 = localData.split(',')[1];
} else {
//此处是安卓中的唯一得坑!在拼接前需要对localData进行换行符的全局替换
//此时一个正常的base64图片路径就完美生成赋值到img的src中了
imageBase64 = localData.replace(/\n/g, '');
}
let fileImage = dataURLtoFile(imageBase64 , 'gg'+i+'.png');
fileImageData.push(fileImage);
},
fail: function (res) {
alert(JSON.stringify(res));
}
});
}
}
3,将base64的图片格式转为file类型以上传给服务器
//符合微信的dataURL转文件类型
function dataURLtoFile(dataURI, filename) {
let byteString, mimeString;
// 查找字符串是否存在
if (dataURI.indexOf(',') >= 0) {
byteString = atob(dataURI.split(',')[1]);
mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
} else {
byteString = atob(dataURI);
mimeString = 'image/png';
}
let n = byteString.length;
let u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = byteString.charCodeAt(n);
}
return new File([u8arr], filename, {type: mimeString});
}
4,通过FormData对象,进行文件上传,提交图片数据到服务器
//提交评论
$("#sub-comment").click(function () {
if ($("#comment-ct").val() == "" && fileImageData.length ==0) {
alert("请输入评论内容!");
return;
}
var orderId = $("#myCommentOrderId").text();
var goodsId = $("#myCommentGoodsId").text();
var comment = $("#comment-ct").val();
let form = new FormData();
form.append('goods_id', goodsId);
form.append('order_id', orderId);
form.append('comment', comment);
if (fileImageData.length > 0) {
for (var i in fileImageData) {
form.append('comment_pic[' + i + ']', fileImageData[i]);
}
}
$.ajax({
type: "POST",
dataType: "json",
url: "",
processData: false,
contentType: false,
data: form,
success: function (json) {
if (json.status) {
$.MsgBox.Alert(json.msg);
} else {
$.MsgBox.Alert(json.msg);
}
}
});
});
5,微信自带查看图片 wx.previewImage
//放大图片
function checkImages(that) {
var arrImages= [];
$(that).parent().children("img").each(function(index,element){
console.log(element.src);
arrImages.push(element.src);
});
wx.previewImage({
current: $(that).attr("src"), // 当前显示图片的http链接
urls: arrImages // 需要预览的图片http链接列表
});
}