以下为wxml
<view class=\'clearFloat\'>
<view class=\'upload_title\'>头像展示(必填)
<span class="basic_title_desc">(选一张好看的个人照片可以增加客户点击的机会哦)
</span>
</view>
<view class=\'healthCertImg\'>
<view class=\'imgrelative\' wx:if="{{headIconArr}}" wx:for="{{headIconArr}}" wx:for-index="index" wx:for-item="item" wx:key="*this">
<image class="image uploadimg" src="{{imgPath+item.key}}" mode="aspectFit" id="{{imgPath+item.key}}" catchtap=\'previewHeadIcon\'>{{item}}</image>
<van-icon name="clear" custom-style="color:#979797;position:absolute;right:-20rpx;top:-20rpx;" id="{{index}}" bind:click="deleteHeadIcon" />
</view>
<image src=\'../../imgs/upload.png\' class=\'uploadimg upload_jkz\' catchtap=\'headIcon\' wx:if="{{IsHeadIcon}}"></image>
</view>
</view>
以下为js
const util = require(\'../../utils/util.js\');
const qiniuUploader = require("../../utils/qiniuUploader");
// 头像展示上传图片
headIcon() {
var that = this
that.chooesImage(that, 1, function(res) {
that.data.headIconArr.push(res)
// console.log(that.data.ysCertImgArr.length)
if (that.data.headIconArr.length >= 1) {
that.setData({
IsHeadIcon: false
});
}
that.setData({
headIconArr: that.data.headIconArr
});
})
},
// 头像展示预览与删除
previewHeadIcon(e) {
this._previewImage(e, this.data.headIconArr)
},
deleteHeadIcon(e) {
var that = this
that._deleteImage(e, that.data.headIconArr, function(files) {
that.setData({
headIconArr: files,
IsHeadIcon: true
});
})
},
/*图片上传*/
chooesImage(that, count, callback) {
util.didPressChooesImage(that, count, function(filePath) {
qiniuUploader.upload(filePath, (res) => {
console.log(res)
callback(res)
that.checkSubmit()
}, (error) => {
console.error(\'error: \' + JSON.stringify(error));
},
null, // 可以使用上述参数,或者使用 null 作为参数占位符
(progress) => {
// console.log(\'上传进度\', progress.progress)
// console.log(\'已经上传的数据长度\', progress.totalBytesSent)
// console.log(\'预期需要上传的数据总长度\', progress.totalBytesExpectedToSend)
}, cancelTask => that.setData({
cancelTask
})
);
})
},
/*图片预览*/
_previewImage: function(e, arr) {
var preUlrs = [];
console.log(arr)
const imgPath = \'https://cdn.wutongdaojia.com/\'
arr.map(
function(value, index) {
var key = imgPath + value.key
preUlrs.push(key);
}
);
wx.previewImage({
current: e.currentTarget.id, // 当前显示图片的http链接
urls: preUlrs // 需要预览的图片http链接列表
})
},
/*图片删除*/
_deleteImage: function(e, arr, callback) {
var that = this;
var files = arr;
var index = e.currentTarget.dataset.index; //获取当前长按图片下标
console.log(index)
wx.showModal({
title: \'提示\',
content: \'确定要删除此图片吗?\',
success: function(res) {
if (res.confirm) {
files.splice(index, 1);
console.log(files)
} else if (res.cancel) {
return false;
}
// files,
that.setData({
isCanAddFile: true
});
that.checkSubmit()
callback(files)
}
})
},
以下为封装的七牛云上传图片方法(util.js)
const qiniuUploader = require("./qiniuUploader");
import api from \'./api.js\';
const getUploadToken = () => {
var params = {
token: wx.getStorageSync(\'token\')
}
api.ajax("GET", params, "/weixin/getUploadToken").then(res => {
console.log(res.data)
initQiniu(res.data)
});
}
// 初始化七牛相关参数
const initQiniu = (uptoken) => {
var options = {
region: \'NCN\', // 华北区
// uptokenURL: \'https://[yourserver.com]/api/uptoken\',
// cdn.wutongdaojia.com
// uptokenURL: \'http://upload-z1.qiniup.com\',
// uptokenURL: \'https://yuesao.wutongdaojia.com/weixin/getUploadToken\',
// uptoken: \'xxx\',
uptoken: uptoken,
// domain: \'http://[yourBucketId].bkt.clouddn.com\',
domain: \'image.bkt.clouddn.com\', // image为七牛云后台创建的空间
shouldUseQiniuFileName: false
};
qiniuUploader.init(options);
}
export function didPressChooesImage(that, count, callback) {
getUploadToken();
// 微信 API 选文件
wx.chooseImage({
count: count,
success: function(res) {
console.log(res)
var filePath = res.tempFilePaths[0];
console.log(filePath)
callback(filePath)
// 交给七牛上传
}
})
}
/**
* 文件上传
* 服务器端上传:http(s)://up.qiniup.com
* 客户端上传: http(s)://upload.qiniup.com
* cdn.wutongdaojia.com
*/
function uploader(file, callback) {
initQiniu();
qiniuUploader.upload(filePath, (res) => {
// 每个文件上传成功后,处理相关的事情
// 其中 info 是文件上传成功后,服务端返回的json,形式如
// {
// "hash": "Fh8xVqod2MQ1mocfI4S4KpRL6D98",
// "key": "gogopher.jpg"
// }
// 参考http://developer.qiniu.com/docs/v6/api/overview/up/response/simple-response.html
that.setData({
\'imageURL\': res.imageURL,
});
}, (error) => {
console.log(\'error: \' + error);
},
// , {
// region: \'NCN\', // 华北区
// uptokenURL: \'https://[yourserver.com]/api/uptoken\',
// domain: \'http://[yourBucketId].bkt.clouddn.com\',
// shouldUseQiniuFileName: false
// key: \'testKeyNameLSAKDKASJDHKAS\'
// uptokenURL: \'myServer.com/api/uptoken\'
// }
null, // 可以使用上述参数,或者使用 null 作为参数占位符
(res) => {
console.log(\'上传进度\', res.progress)
console.log(\'已经上传的数据长度\', res.totalBytesSent)
console.log(\'预期需要上传的数据总长度\', res.totalBytesExpectedToSend)
});
};
module.exports = {
initQiniu: initQiniu,
getUploadToken: getUploadToken,
didPressChooesImage: didPressChooesImage
}
封装ajax(api.js)
const ajax = (Type, params, url) => {
var methonType = "application/json";
// var https = "http://www.wutongdaojia.com"
var https = "https://yuesao.wutongdaojia.com"
var st = new Date().getTime()
if (Type == "POST") {
methonType = "application/x-www-form-urlencoded"
}
return new Promise(function (resolve, reject) {
wx.request({
url: https + url,
method: Type,
data: params,
header: {
\'content-type\': methonType,
\'Muses-Timestamp\': st,
\'version\': \'v1.0\' // 版本号
// \'Muses-Signature\': sign
},
success: function (res) {
// if (res.statusCode != 200) {
// reject({ error: \'服务器忙,请稍后重试\', code: 500 });
// return;
// }
// resolve(res.data);
wx.hideLoading()
console.log(res)
if (res.data.status == 200) {
resolve(res.data);
} else if (res.data.status == 400) {
wx.showToast({
title: res.data.message,
icon: \'none\',
duration: 1000
})
return
} else if (res.data.status == 401){
wx.removeStorageSync(\'phone\')
wx.removeStorageSync(\'token\')
wx.showToast({
title: res.data.message,
icon: \'none\',
duration: 1000,
success:function(){
wx.navigateTo({
url: \'../login/index\',
})
}
})
return
} else {
//错误信息处理
wx.showToast({
title: \'服务器错误,请联系客服\',
icon: \'none\',
duration: 1000
})
}
},
fail: function (res) {
// fail调用接口失败
reject({ error: \'网络错误\', code: 0 });
},
complete: function (res) {
// complete
}
})
})
}