核心代码
export function removeSavedFile(filePath) {
return new Promise((resolve, reject) => {
uni.removeSavedFile({
filePath,
success: resolve,
fail: reject,
});
})
}
export function saveImgPhotosAlbum(filePath) {
return new Promise(async (resolve, reject) => {
uni.saveImageToPhotosAlbum({
filePath,
success: (res) => {
tt.showToast({
title: "成功保存到本地相册"
});
resolve({res,sucess:true})
},
fail: (err) => {
console.log('saveImgPhotosAlbum-err', err)
const obj = {
'saveImageToPhotosAlbum:fail cancel':{
text:'退出手机权限设置 / 取消保存图片(在选择保存路径时 未选择返回)'
},
'saveImageToPhotosAlbum:fail auth deny':{
text:'没有权限'
}
}
if(obj[err.errMsg]){
resolve({sucess:false,errMsg:obj[err.errMsg].text})
}
reject(err)
}
})
})
}
export function downloadFile(filePath) {
return new Promise((resolve, reject) => {
uni.downloadFile({
url: filePath,
header: { "content-type": "application/png"},
success(res) {
if (res.statusCode === 200) {
resolve(res.tempFilePath)
}
reject(res)
},
fail: reject
})
})
}
export function showToast(title, icon) {
uni.showToast({title,icon})
}
export function writeFileBase64(filePath, base64, type='base64') {
const file = uni.getFileSystemManager()
return new Promise(async (resolve, reject) => {
if(type === 'base64'){
file.writeFile({
filePath,
encoding: 'base64',
data: base64,
success: resolve,
fail: err=>{
if(err.errMsg.indexOf('writeFile:fail permission denied') != -1){
resolve(false)
}
console.log('writeFileBase64-err',err)
reject(err)
}
})
return
}
if(type === 'buffer'){
const buffer = uni.base64ToArrayBuffer(base64)
file.writeFile({
filePath,
encoding: 'binary',
data: buffer,
success(res){
console.log('写入成功',res)
resolve(res)
},
fail:reject
})
return
}
})
}
export function openSetting(obj) {
return new Promise((resolve, reject) => {
uni.openSetting({
success: res=>{
console.log('res',res)
resolve(res)
},
fail: err=>{
console.log('openSetting',err)
reject(err)
},
});
})
}
export function showModal(obj) {
return new Promise((resolve, reject) => {
uni.showModal({
title: '提示',
content: '提示内容',
showCancel: false,
success: () => {
resolve()
},
fail: reject,
...obj
})
})
}
相册权限
export function authorizeAlbum() {
const obj = {
'ok':{text:'成功',bool: true},
'auth deny':{text:'没有权限',bool: false}
}
return new Promise((resolve, reject) => {
uni.authorize({
scope: 'scope.album',
success(res) {
const val = obj[res.data['scope.album']]
if (val) { resolve({is:val.bool,res}) }
reject(res)
},
fail(err) {
const val = obj[err.data['scope.album']]
if (val) { resolve({is:val.bool,err}) }
reject(err)
}
})
})
}
export async function saveImgAlbum(base64){
let result = {save:true}
let fileName = new Date().valueOf();
const filePath = tt.env.USER_DATA_PATH + '/'+ fileName +'.png'
const isAlbum = await authorizeAlbum()
if(!isAlbum.is){
await showModal({content: '需要您授权保存相册'})
await openSetting()
}
const path = await upTempImg({base64})
const isSave = await saveImgPhotosAlbum(path)
if(!isSave.sucess){
console.log('isSave',isSave)
showToast(isSave.errMsg ,'fail')
result = {save:false, text:isSave.errMsg}
}
await removeSavedFile(filePath)
return result
}
调用
const {data} = await createQRCode()
const save = await saveImgAlbum(data.data.QRCode)
console.log('save',save)