网上找了几种方式,前提都是要通过uni.canvasToTempFilePath先获取到二维码图片的临时路径再进行后续的处理。
1.最开始正常使用uni提供的方法:
uni.canvasToTempFilePath(
{
canvasId: 'qrcode',
fileType: 'jpg',
success: result => {
uni.saveImageToPhotosAlbum({
filePath: result.tempFilePath,
success: res => {
uni.showToast({
title:'保存成功!',
durations: 2000
})
},
fail: err => {
uni.showToast({
title:'保存失败!',
durations: 2000,
icon:'none'
})
}
});
},
fail: err => {
uni.showToast({
title:'保存失败!',
durations: 2000,
icon:'none'
})
}
},
this // 组件内使用必传当前实例
);
此种方式中的uni.saveImageToPhotosAlbum不支持h5,所以出现了上线后二维码点击无效的情况,会报错提示h5不支持次方法。
2.使用qpp中h5提供的原生方法:
plus.gallery.save( result.tempFilePath, function (res) {
uni.showToast({
title:'保存成功!',
durations: 2000
})
}, function (res) {
uni.showToast({
title:'保存失败!',
durations: 2000,
icon:'none'
})
});
此种方式使用的plus.gallery.save(path,successFun,failFun)只支持在app环境下的图片保存,不支持嵌入app的H5页面。
3.使用原生a标签的方式进行下载
const aEle = document.createElement('a')
aEle.download = 'uqrcode'
aEle.href = result.tempFilePath
document.body.appendChild(aEle)
aEle.click()
aEle.remove()
此种方式可以分享至浏览器进行下载,无法直接保存至相册
4.更换下载思路,先进行图片预览,在通过自带的保存功能将图片保存至相册
uni.previewImage({
urls:[result.tempFilePath],
success:()=>{
this.controllTouch();
}
})
此种方式是我最终使用的方式,对要下载的二维码进行了一个预览操作再进行了下载,类似于微信中的长按下载。
希望对大家有所帮助,才接触写app,水平有限,有不足的地方请大佬指出!!