.TS
const fsm = uni.getFileSystemManager()
/**
* 将 base64 转换为本地图片路径
* @param base64data base64 数据
*/
export const writeFile = (base64data: string) => new Promise((resolve) => {
const FILE_BASE_NAME = Date.parse(new Date().toString())
const result = /data:image\/(\w+);base64,(.*)/.exec(base64data)
if (!result || result.length < 3) {
resolve('')
return
}
const [, format, bodyData] = result
const filePath = `${wx.env.USER_DATA_PATH}/poster/${FILE_BASE_NAME}.${format}`
const buffer = uni.base64ToArrayBuffer(bodyData)
fsm.writeFile({
filePath,
data: buffer,
encoding: 'binary',
success() {
resolve(filePath)
},
fail() {
resolve('')
},
})
})
export const readFile = (base64data: string) => new Promise((resolve) => {
fsm.access({
path: `${wx.env.USER_DATA_PATH}/poster`,
success() {
writeFile(base64data).then((filePath) => {
resolve(filePath)
})
},
fail() {
fsm.mkdir({
dirPath: `${wx.env.USER_DATA_PATH}/poster`,
success() {
writeFile(base64data).then((filePath) => {
resolve(filePath)
})
},
})
},
})
})
/**
* 删除目录
*/
export const delFile = () => new Promise((resolve) => {
fsm.rmdir({
dirPath: `${wx.env.USER_DATA_PATH}/poster`,
recursive: true,
success() {
resolve(true)
},
})
})
.JS
//引入TS方法
import { readFile, delFile } from '@/static/utils/poster'
//这是删除防止内存超出
delFile().then(() => {
console.log('删除成功')
})
// 获取小程序码接口
export const getQrCode = async (path:string) => {
const res = await http.get('接口地址', {
header: { 'content-type': 'application/x-www-form-urlencoded' },
responseType: 'arraybuffer',
params: { path },
})
return res.data
}
//获取小程序码
const rect = await getQrCode(path)
//转成本地图片路径
readFile(`data:image/jpeg;base64,${uni.arrayBufferToBase64(rect)}`).then((res) => {
console.log('路径',res)
})
遇到问题可以看我主页加我Q,很少看博客,对你有帮助别忘记点赞收藏。