<view style="position: absolute;top: -999999px;">
<view>
<canvas :style="'width:' + windowWidth + 'px;' + 'height:' + windowHeight + 'px;'"
canvas-id="firstCanvas"></canvas>
</view>
</view>
//要放到首次进入页面时请求上传参数,放入缓存的话,会因为效验时间而过期,导致上传图片失败
getUploadParam() {
let that = this;
util.get(api.requestUrl_tc + '接口地址').then(res => {
// console.log("上传参数", res);
if (res.code == 1) {
that.ossInfo = res.data
} else {}
})
},
//阿里云返回上传参数
accessid: ""
callback: ""
dir: "2021-07-23"
expire: 1627021230
host: "上传地址"
policy: ""
signature: "签名"
//选择图片上传
uploadRestFiles(index) {
let that = this;
const {
order
} = that
//#ifdef MP-WEIXIN
uni.chooseImage({
count: 5,
// mediaType: ['image'],
// sizeType: ['original', 'compressed'],
sourceType: ['camera', 'album'],
// type: 'file',
// maxDuration: 30,
success(re) {
console.log("图片上传", re)
console.log("sdfsdf", re.tempFiles);
that.uploadFile(re.tempFiles, 'reset');
console.log("resetImgList", that.resetImgList);
}
})
//#endif
//#ifdef APP-PLUS || H5
uni.chooseImage({
count: 5,
sizeType: ['compressed'],
sourceType: ['camera', 'album'],
success: res => {
console.log("H5选择图片上传", res)
let tempFilePaths = res.tempFilePaths;
that.uploadFile(res.tempFilePaths, 'reset');
}
});
//#endif
},
//多图片上传(这里涉及到画布,上传图片至阿里(formData ))
uploadFile(data, type) {
let that = this,
i = data.i ? data.i : 0, //当前上传的哪张图片
success = data.success ? data.success : 0, //上传成功的个数
fail = data.fail ? data.fail : 0; //上传失败的个数
const {
uploadImg,
optionsIndex, //点击的目标项
order,
localVal,
location,
userInfo,
ossInfo
} = that;
ImgIndex += 1;
let fileName;
//救援图片上传
//#ifdef APP-PLUS || H5
console.log("救援图片上传(h5)", data[i]);
fileName = data[i].substring(data[i].lastIndexOf(".") + 1, data[i].length)
//#endif
//#ifdef MP-WEIXIN
console.log("救援图片上传", data[i].path);
fileName = data[i].path.substring(data[i].path.lastIndexOf(".") + 1, data[i].path.length)
console.log("path.lastIndexOf", data[i].path.lastIndexOf(".") + 1);
console.log("data[i].path.length", data[i].path);
//#endif
console.log("fileName", fileName);
let keyInfo = that.ossInfo.dir + '/' + that.randomString(32) + '.' + fileName;
console.log(keyInfo, 'keyInfo')
let uploadUrl = that.ossInfo.host;
console.log("请求参数(oos)", ossInfo)
let formData = {
'Filename': 'upload',
'name': 'upload',
'key': keyInfo,
'policy': that.ossInfo.policy,
'OSSAccessKeyId': that.ossInfo.accessid,
'success_action_status': '200', //让服务端返回200,不然,默认会返回204
'signature': that.ossInfo.signature,
'method': 'POST', //请求方式
'type': 'vehicle'
}
console.log(formData)
uni.showLoading({
title: "图片上传中..."
})
console.log("增加水印功能");
//增加水印
uni.getImageInfo({
//#ifdef MP-WEIXIN
src: data[i].path,
//#endif
//#ifdef APP-PLUS || H5
src: data[i],
//#endif
//src: re.tempFilePaths[0],测试专用
success: (res) => {
// ctx.drawImage(re.tempFilePaths[0], 0, res.width / 2, res.height /2
// 2)
//初始化画布
// ctx.fillRect(0, 0, res.width, res.height);
console.log("windowWidth", that.windowWidth, "windowHeight",
that
.windowHeight);
console.log("res.width", res.width, "res.height", res.height);
// ctx.fillRect(0, 0, that.windowWidth, that.windowHeight);
//324,246
var width = res.width
var height = res.height
//获取屏幕宽度
let screenWidth = uni.getSystemInfoSync().windowWidth
//处理一下图片的宽高的比例
if (width >= height) {
if (width > screenWidth) {
width = screenWidth
}
height = height / res.width * width
} else {
if (width > screenWidth) {
width = screenWidth
}
if (height > 400) {
height = 400
width = res.width / res.height * height
} else {
height = height / res.width * width
}
}
that.windowWidth = width * 2;
that.windowHeight = height * 2;
setTimeout(() => {
let ctx = uni.createCanvasContext('firstCanvas', this); /** 创建画布 */
ctx.drawImage(res.path, 0, 0, width * 2, height * 2);
ctx.setFillStyle('#B33836') //字体颜色
ctx.setFontSize(13) //字体大小
ctx.fillText(userInfo.company_name + " " + userInfo.nick + " " + userInfo
.mobile, 5, 20) //字体内容和位置
ctx.setFillStyle('#B33836') //字体颜色
ctx.setFontSize(13) //字体大小
ctx.fillText("lat:" + location.lat + " lng:" + location.lng, 5,
40) //字体内容和位置
ctx.setFillStyle('#B33836') //字体颜色
ctx.setFontSize(13) //字体大小
ctx.fillText("地址:" + localVal, 5, 60) //字体内容和位置
ctx.setFillStyle('#B33836') //字体颜色
ctx.setFontSize(13) //字体大小
ctx.fillText("时间:" + dateformat.dateFormatNormal(''), 5, 80) //字体内容和位置
ctx.draw(false, () => {
uni.canvasToTempFilePath({
canvasId: 'firstCanvas',
success: (res) => {
console.log("代码996行", res);
that.src = res.tempFilePath;
// console.log("请求地址1111",uploadUrl);
uni.uploadFile({
// url: api.requestUrl_tc +'请求地址',
//#ifdef MP-WEIXIN
url: uploadUrl,
//#endif
//#ifdef APP-PLUS || H5
url: '/api',(H5端使用了代理(跨域访问))
//#endif
filePath: res.tempFilePath,
name: 'file',
//#ifdef MP-WEIXIN
header: {
'Content-Type': 'multipart/form-data',
'Authori-zation': 'Bearer ' +
uni.getStorageSync(
"token_tc"),
},
//#endif
//#ifdef APP-PLUS || H5
header: {
'Authori-zation': 'Bearer ' +
uni.getStorageSync(
"token_tc"),
},
//#endif
method: 'POST', //请求方式
formData: formData,
success: function(res) {
console.log(
"阿里云返回图片信息",
res) //接口返回网络路径
//var dataCode = JSON.parse(res.data)
if (res.statusCode ==
200) {
success++;
console.log(
"救援图片上传成功返回((图片)服务器地址)",
res);
//如果是非其他图片上传
if (type !=
'reset') {
uploadImg.map((
item,
index
) => {
if (item
.id ==
optionsIndex
)
item
.imgList
.push(
uploadUrl +
'/' +
keyInfo
);
})
} else {
//赋值其他图片
let obj = {}
obj.pic_id = ''
obj.url =
uploadUrl +
'/' +
keyInfo
that.resetImgList
.push(obj);
console.log(
"赋值于其他图片(画布生成之后上传服务器)",
that
.resetImgList
);
}
//目前单张上传
that.jyImaUpload(
uploadUrl +
'/' +
keyInfo,
type,
optionsIndex
)
console.log(
"optionsIndex(dddddddddd)",
optionsIndex
);
} else {
uni.hideLoading()
uni.showToast({
title: res
.msg,
icon: 'none',
duration: 1300,
mask: true
})
}
},
complete(re) {
console.log("上传情况", re);
console.log(i);
i++; //这个图片执行完上传后,开始上传下一张
console.log(i + "==" + data
.length);
if (i == data
.length) { //当图片传完时,停止调用
console.log('执行完毕');
console.log('成功:' +
success +
" 失败:" + fail);
} else { //若图片还没有传完,则继续调用函数
console.log("若图片还没有传完",
i);
data.i = i;
data.success = success;
data.fail = fail;
that.uploadFile(data,
type);
}
},
fail(res) {
uni.hideLoading()
fail++; //图片上传失败,图片上传失败的变量+1
console.log('fail:' + i +
"fail:" +
fail);
}
})
},
complete(com) {}
})
})
}, 350)
}
})
},