更新记录
1.0.9(2025-06-30)
- 重新调整接口结构
- 增加harmony支持
- 增肌路径工具类
1.0.8(2023-10-05)
- 修复Android新版基座语法兼容性问题
1.0.7(2023-09-18)
- 原始返回图片与base64之间的转换数据
平台兼容性
uni-app
Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
---|---|---|---|---|---|---|---|---|
√ | √ | - | - | - | - | 4.4 | 12 | √ |
微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 快应用-华为 | 快应用-联盟 |
---|---|---|---|---|---|---|---|---|---|---|
× | × | × | × | × | × | - | × | × | × | × |
uni-app x
Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
---|---|---|---|---|---|
- | - | 5.0 | 12 | √ | × |
常用工具类,文件IO、图片base64、设备ID、保存删除app后的数据
文件IO工具类(增、删、查、改,copy、move、rename、遍历等等)
图片与Base64相互转换
路径工具类(获取项目资源文件绝对路径、app临时目录)
各种设备ID工具类(deviceID、serial、IMEI、MEID、OAID、AAID)等等
钥匙串保存数据/关键资产存储服务(保存的数据app删除重装后还能获取,仅支持iOS、harmony)
如需更多常用工具类接口,请点击"进入交流群"联系作者
集成步骤
- 集成插件步骤请参考https://www.cnblogs.com/wenrisheng/p/18323027
- harmony需要配置权限ohos.permission.STORE_PERSISTENT_DATA、ohos.permission.APP_TRACKING_CONSENT,可参考官网权限配置
常用文件处理插件
-
文件预览https://ext.dcloud.net.cn/plugin?id=17167
- 支持pdf/word/excel/ppt/图片,支持本地或在线文件
-
文件增删查改copy遍历https://ext.dcloud.net.cn/plugin?id=14130
- 文件读写、copy、move、遍历文件夹、是否存在、删除、重命名......等等
-
读取常用文件目录(包含U盘)https://ext.dcloud.net.cn/plugin?id=15243
- uniapp(_www、_doc、_download)
- Android(数据目录、文件目录、缓存目录、环境environment目录、SDCard目录、外接U盘)
- iOS(documentDirectory、temporaryDirectory、libraryDirectory、cachesDirectory)
- 从U盘读取或保存文件
-
读取本地相册图片视频音频https://ext.dcloud.net.cn/plugin?id=15711
- 获取相册图片、视频、音频文件
- 常用于自定义相册UI
路径工具类(获取项目资源文件绝对路径、app临时目录)
import {
UTSPathUtils
} from "@/uni_modules/wrs-uts-commonutils"
let pathUtils = new UTSPathUtils()
- 获取项目资料的绝对路径
// 获取项目里static下logo.png在手机上的绝对路径
let resourcePath = pathUtils.getResourcePath("/static/logo.png")
- 获取app的缓存路径,该目录一般用来保存临时数据
let cacheDir = pathUtils.getCacheDir()
- 获取app的fileDir路径,该目录一般用来保存数据库文件、配置文件、下载文件,app重启后数据还在,app删除后数据才会删除
let fileDir = pathUtils.getFileDir()
文件IO工具类(增、删、查、改,copy、move、rename、遍历等等)
import {
UTSFileUtils
} from "@/uni_modules/wrs-uts-commonutils"
let fileUtils = new UTSFileUtils()
- 判断文件是否存在
let resourcePath = pathUtils.getResourcePath("/static/loginSys/index.html")
fileUtils.isFileExists(resourcePath, (resp) => {
let isExist = resp.flag
this.showMsg("isFileExists:" + resourcePath + " 存在:" + isExist)
})
- 重命名文件
let newName = "bb.png"
let filePath = pathUtils.getResourcePath("/static/logo.png")
fileUtils.rename(filePath, newName, (resp) => {
let flag = resp.flag
if (flag) {
this.showMsg("rename:" + filePath + " result:" + flag)
} else {
this.showMsg("rename:" + filePath + " result:" + JSON.stringify(resp))
}
})
- 判断是否是目录
let filePath = pathUtils.getResourcePath("/static")
fileUtils.isDir(filePath, (resp) => {
let isExist = resp.flag
this.showMsg("isDir:" + filePath + " 目录:" + isExist)
})
- 判断是否是文件
let filePath = pathUtils.getResourcePath("/static/logo.png")
fileUtils.isFile(filePath, (resp) => {
let isFile = resp.flag
this.showMsg("isFile:" + filePath + " 文件:" + isFile)
})
- 判断目录是否存在,如果不存在则创建目录
let dir = pathUtils.getResourcePath("/testDir")
fileUtils.createOrExistsDir(dir, (resp) => {
let suc = resp.flag
if(suc) {
this.showMsg("createOrExistsDir:" + dir + " result:" + suc)
} else {
this.showMsg("createOrExistsDir:" + dir + " result:" + JSON.stringify(resp))
}
})
- 复制文件或目录
let srcPath = pathUtils.getResourcePath("/static/loginSys")
let destPath = pathUtils.getCacheDir() + "/loginSysCopy"
console.log("copy srcPath:" + srcPath + " destPath:" + destPath)
fileUtils.copy(srcPath, destPath, (resp) => {
let suc = resp.flag
if(suc) {
this.showMsg("copy:" + suc)
} else {
this.showMsg("copy:" + JSON.stringify(resp))
}
})
- 移动文件或目录
let srcPath = pathUtils.getResourcePath("/static/loginSys")
let destPath = pathUtils.getCacheDir() + "/loginSysMove"
fileUtils.move(srcPath, destPath, (resp) => {
let suc = resp.flag
if(suc) {
this.showMsg("move:" + suc)
} else {
this.showMsg("move:" + JSON.stringify(resp))
}
})
- 删除文件或目录
// var path = "/sdcard/bb/test.png"
let path = pathUtils.getResourcePath("/static/loginSys")
fileUtils.delete(path, (resp) => {
let suc = resp.flag
if(suc) {
this.showMsg("delete:" + suc)
} else {
this.showMsg("delete:" + JSON.stringify(resp))
}
})
- 获取目录下所有的文件和文件夹
let path = pathUtils.getResourcePath("/static/loginSys")
fileUtils.listFilesInDir(path, (resp) => {
let list = resp.fileArray
// {"fileArray":[{"isFile":true,"name":"index.html"},{"isFile":false,"name":"css"},{"isFile":false,"name":"images"},{"isFile":false,"name":"js"},{"isFile":true,"name":"test.png"},{"isFile":true,"name":"test.pdf"},{"isFile":true,"name":"3d.svf"}]}
this.showMsg("listFilesInDir:" + path + " result:" + JSON.stringify(list))
})
- 获取文件或目录大小
let path = pathUtils.getResourcePath("/static/loginSys")
fileUtils.getLength(path, (resp) => {
let length = resp.length
// 单位:字节byte
this.showMsg("getLength:" + path + " result:" + length)
})
- 读取文件文本内容
let path = pathUtils.getResourcePath("/static/loginSys/index.html")
fileUtils.readFile2String(path, (resp) => {
let str = resp.str
if(str) {
this.showMsg("readFile2String:" + path + " result:" + str)
} else {
this.showMsg("readFile2String error:" + JSON.stringify(resp))
}
})
- 将字符串文本写入文件
let filePath = pathUtils.getCacheDir() + "/text.txt"
var content = "aaaa"
var append = false
fileUtils.writeFileFromString(filePath, content, append, (resp) => {
let suc = resp.flag
if(suc) {
this.showMsg("writeFileFromString:" + filePath + " result:" + suc)
} else {
this.showMsg("writeFileFromString error:" + JSON.stringify(resp))
}
})
- 获取文件目录
let filePath = pathUtils.getResourcePath("/static/logo.png")
fileUtils.getDirName(filePath, (resp) => {
let path = resp.path
this.showMsg("getDirName:" + filePath + " result:" + path)
})
图片工具类
import {
UTSImageUtils,
UTSPathUtils
} from "@/uni_modules/wrs-uts-commonutils"
let imageUtils = new UTSImageUtils()
- 图片转Base64
注意: 有些android系统转出来的图片会以“data;image/png;base64,”为前缀,iOS没有这个前缀
var filePath = pathUtils.getResourcePath("/static/logo.png")
imageUtils.image2Base64(filePath, (resp) => {
let str = resp.str
if (str) {
// "data:image/png;base64," + base64Str
// android转出来的图片会以“data;image/png;base64,”为前缀,iOS、harmony没有这个前缀
this.showMsg("image2Base64 file:" + filePath + " base64Str:" +
str)
} else {
// android转出来的图片会以“data;image/png;base64,”为前缀,iOS没有这个前缀
this.showMsg("image2Base64 error:" + JSON.stringify(resp))
}
})
- Base64转图片
var base64Str =
"iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAFLSURBVHic7dyxbQIxHEbxzxYVNRukDAMQNmCRMAIzMALZgZoNThngWjagpoxThC4Jr0HyRXm/9qTzX0/2VdaVJFke1k8tH/ukbJLM879dk3YqqbtxO5zLV5y8J23Re7JpKZeSrGa3nWOcb9qipe3r7VjpR2VT4zfnnnntPcHUGQgYCBgIGAgYCBgIGAgYCBgIGAgYCBgIzB7xkvF1+PXZ8m39iCW6re0OAgYCBgIGAgYCBgIGAgYCBgIGAgYCBgIGAgYCBgIGAgYCBgIGAgYCBgIGAgYCBgIGAgYCBgIGAgYCBgIGAg+5H3TPvfs7f4E7CBgIGAgYCBgIGAiU58NL6z3ElLmDgIGAgYCBgIGAgYCBgIGAgYCBQE1y7T3EhF1r0k69p5iudqoldZeUS+9RpqdcSuqujtvhXJJV0o7xuCVfvwk8lmQ1bofzJxi+NCeqg7Y3AAAAAElFTkSuQmCC"
let filePath = pathUtils.getCacheDir() + "/aa.png"
imageUtils.base642Image(base64Str, filePath, (resp) => {
let flag = resp.flag
if (flag) {
this.showMsg("base642Image suc")
} else {
this.showMsg("base642Image error:" + JSON.stringify(resp))
}
})
设备工具类
import {
UTSDeviceUtils
} from "@/uni_modules/wrs-uts-commonutils"
let deviceUtils = new UTSDeviceUtils()
- 获取设备deviceID,可以当作是设备硬件ID
在iOS里除非系统重置可能会导致设备ID改变,app重装或升级系统都不会改变设备ID,harmony采用的是uuid保存到关键资产存储里面
deviceUtils.getUniqueDeviceId((resp) => {
let value = resp.value
if (value) {
this.showMsg("设备唯一ID:" + value)
} else {
this.showMsg("设备唯一ID获取失败:" + JSON.stringify(resp))
}
})
- 获取OAID,仅支持harmony OAID说明见官网https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/oaid-service-V5
let params = {}
params.permissions = [
"ohos.permission.APP_TRACKING_CONSENT"
]
permissionsUtils.requestPermissionsFromUser(params, (resp) => {
if (resp.authResults[0] == 0) {
deviceUtils.getOAID((resultResp) => {
let value = resultResp.value
if (value) {
this.showMsg("OAID:" + value)
} else {
this.showMsg("OAID获取失败:" + JSON.stringify(resp))
}
})
} else {
this.showMsg("OAID获取失败,无获取权限:" + JSON.stringify(resp))
}
})
- 获取AAID,仅支持harmony AAID说明见官网https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/push-get-aaid-V5
deviceUtils.getAAID((resultResp) => {
let value = resultResp.value
if (value) {
this.showMsg("AAID:" + value)
} else {
this.showMsg("AAID获取失败:" + JSON.stringify(resp))
}
})
钥匙串保存数据/关键资产存储服务(保存的数据app删除重装后还能获取,仅支持iOS、harmony)
android如果有此业务场景需要方案请联系作者
import {
UTSKeyChainUtils
} from "@/uni_modules/wrs-uts-commonutils"
let keyChainUtils = new UTSKeyChainUtils()
- 保存值
例如:保存登录模块账号为zhangsan的密码
let params = {}
params.value = "暗示法在S地方312312"
params.key = "name"
keyChainUtils.setValue(params, (resp) => {
let flag = resp.flag
if (flag) {
this.showMsg("保存成功")
} else {
this.showMsg("保存失败:" + JSON.stringify(resp))
}
})
- 获取值
let params = {}
params.key = "name"
keyChainUtils.getValue(params, (resp) => {
let value = resp.value
if (value) {
this.showMsg("获取成功:" + value)
} else {
this.showMsg("获取失败:" + JSON.stringify(resp))
}
})
- 删除值
let params = {}
params.key = "name"
keyChainUtils.deleteValue(params, (resp) => {
let value = resp.value
if (value) {
this.showMsg("删除成功:" + value)
} else {
this.showMsg("删除失败:" + JSON.stringify(resp))
}
})