更新记录
1.0.8(2023-10-05)
- 修复Android新版基座语法兼容性问题
1.0.7(2023-09-18)
- 原始返回图片与base64之间的转换数据
1.0.6(2023-09-18)
- 修复Android新基座编译问题
平台兼容性
Vue2 | Vue3 |
---|---|
√ | √ |
App | 快应用 | 微信小程序 | 支付宝小程序 | 百度小程序 | 字节小程序 | QQ小程序 |
---|---|---|---|---|---|---|
HBuilderX 3.6.8,Android:4.4,iOS:9,HarmonyNext:不确定 | × | × | × | × | × | × |
钉钉小程序 | 快手小程序 | 飞书小程序 | 京东小程序 |
---|---|---|---|
× | × | × | × |
H5-Safari | Android Browser | 微信浏览器(Android) | QQ浏览器(Android) | Chrome | IE | Edge | Firefox | PC-Safari |
---|---|---|---|---|---|---|---|---|
× | × | × | × | × | × | × | × | × |
常用工具类
项目导入插件后,需要自定义基座运行
常用文件处理插件
-
文件预览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
工具类模块
1. 文件读写、copy、move、遍历文件夹、是否存在、删除、重命名......等等
2. 图片与Base64相互转换
3. 获取设备ID
4. 钥匙串数据存储,仅支持iOS
文件IO工具类
import {
UTSFileUtils
} from "@/uni_modules/wrs-uts-commonutils"
- 判断文件是否存在
var wwwDir = plus.io.convertLocalFileSystemURL("_www")
// Android获取的absPath以/结尾,iOS获取的absPath不是/结尾
if (wwwDir.endWith('/')) {
wwwDir = wwwDir.substring(0, wwwDir.length - 1)
}
// filePath需要传文件绝对路径,如:/xxx/xxx/aa.txt
var filePath = wwwDir + "/static/loginSys/index.html"
UTSFileUtils.isFileExists(filePath, (isExist)=>{
this.showMsg("isFileExists:" + filePath + " 存在:" + isExist)
})
- 重命名文件
var filePath = "/sdcard/index.html"
var newName = "aa.html"
if (!this.isAndroid) {
var docDir = plus.io.convertLocalFileSystemURL("_doc")
if (docDir.endWith('/')) {
docDir = wwwDir.substring(0, docDir.length - 1)
}
filePath = docDir + "/loginSys/index.html"
}
UTSFileUtils.rename(filePath, newName, (flag)=>{
this.showMsg("rename:" + filePath + " result:" + flag)
})
- 判断是否是目录
var wwwDir = plus.io.convertLocalFileSystemURL("_www")
// Android获取的absPath以/结尾,iOS获取的absPath不是/结尾
if (wwwDir.endWith('/')) {
wwwDir = wwwDir.substring(0, wwwDir.length - 1)
}
var filePath = wwwDir + "/static/loginSys"
UTSFileUtils.isDir(filePath, (isExist)=>{
this.showMsg("isDir:" + filePath + " 目录:" + isExist)
})
- 判断是否是文件
var wwwDir = plus.io.convertLocalFileSystemURL("_www")
// Android获取的absPath以/结尾,iOS获取的absPath不是/结尾
if (wwwDir.endWith('/')) {
wwwDir = wwwDir.substring(0, wwwDir.length - 1)
}
var filePath = wwwDir + "/static/loginSys/index.html"
UTSFileUtils.isFile(filePath, (isFile)=>{
this.showMsg("isFile:" + filePath + " 文件:" + isFile)
})
- 判断目录是否存在,不存在则判断是否创建成功
// 判断目录是否存在,如果不存在则创建目录
var dir = "/sdcard/oneLevel/towlevel"
if (!this.isAndroid) {
var docDir = plus.io.convertLocalFileSystemURL("_doc")
if (docDir.endWith('/')) {
docDir = wwwDir.substring(0, docDir.length - 1)
}
dir = docDir + "/oneLevel/towlevel"
}
UTSFileUtils.createOrExistsDir(dir, (suc)=>{
this.showMsg("createOrExistsDir:" + dir + " result:" + suc)
})
- 复制文件或目录
var wwwDir = plus.io.convertLocalFileSystemURL("_www")
// Android获取的absPath以/结尾,iOS获取的absPath不是/结尾
if (wwwDir.endWith('/')) {
wwwDir = wwwDir.substring(0, wwwDir.length - 1)
}
// copy目录时,srcPath目录下的所有文件都会copy到destPath下
// var srcPath = wwwDir + "/static/loginSys"
// var destPath = "/sdcard"
var srcPath = "/sdcard/aa.txt"
var destPath = "/sdcard/cc.txt"
if (!this.isAndroid) {
var docDir = plus.io.convertLocalFileSystemURL("_doc")
// Android获取的absPath以/结尾,iOS获取的absPath不是/结尾
if (docDir.endWith('/')) {
docDir = wwwDir.substring(0, docDir.length - 1)
}
console.log("docDir:" + docDir)
// ios copy文件
// srcPath = wwwDir + "/static/loginSys"
// destPath = docDir + "/loginSys"
// 复制文件时,只能复制到本目录
srcPath = docDir + "/loginSys/index.html"
destPath = docDir + "/bb/kk/copyIndex.html"
}
UTSFileUtils.copy(srcPath, destPath, (suc)=>{
this.showMsg("copy:" + srcPath + " result:" + suc)
})
- 移动文件或目录
var wwwDir = plus.io.convertLocalFileSystemURL("_www")
// Android获取的absPath以/结尾,iOS获取的absPath不是/结尾
if (wwwDir.endWith('/')) {
wwwDir = wwwDir.substring(0, wwwDir.length - 1)
}
// 移动文件时,destPath传目标文件的绝对路径,不能是目标文件的目录
// var srcPath = "/sdcard/test.png"
// var destPath = "/sdcard/bb/test.png"
var srcPath = "/sdcard/images"
var destPath = "/sdcard/bb/images"
if (!this.isAndroid) {
srcPath = wwwDir + "/static/loginSys"
var docDir = plus.io.convertLocalFileSystemURL("_doc")
// Android获取的absPath以/结尾,iOS获取的absPath不是/结尾
if (docDir.endWith('/')) {
docDir = docDir.substring(0, docDir.length - 1)
}
srcPath = docDir + "/loginSys"
destPath = docDir + "/bb/kk"
}
console.log("srcPath:" + srcPath)
console.log("destPath:" + destPath)
UTSFileUtils.move(srcPath, destPath, (suc)=>{
this.showMsg("move:" + srcPath + " result:" + suc)
})
- 删除文件或目录
var path = "/sdcard/bb/images"
if (!this.isAndroid) {
var docDir = plus.io.convertLocalFileSystemURL("_doc")
// Android获取的absPath以/结尾,iOS获取的absPath不是/结尾
if (docDir.endWith('/')) {
docDir = docDir.substring(0, docDir.length - 1)
}
// path = docDir + "/loginSys/css"
path = docDir + "/loginSys/index.html"
}
UTSFileUtils.delete(path, (suc)=>{
this.showMsg("delete:" + path + " result:" + suc)
})
- 获取目录下所有文件
var wwwDir = plus.io.convertLocalFileSystemURL("_www")
// Android获取的absPath以/结尾,iOS获取的absPath不是/结尾
if (wwwDir.endWith('/')) {
wwwDir = wwwDir.substring(0, wwwDir.length - 1)
}
var srcPath = wwwDir + "/static/loginSys"
var path = srcPath
UTSFileUtils.listFilesInDir(path, (list)=>{
// {"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))
})
- 获取文件或目录大小
var path = "/sdcard/test.pdf"
if (!this.isAndroid) {
var docDir = plus.io.convertLocalFileSystemURL("_doc")
// Android获取的absPath以/结尾,iOS获取的absPath不是/结尾
if (docDir.endWith('/')) {
docDir = docDir.substring(0, docDir.length - 1)
}
// path = docDir + "/loginSys/css"
path = docDir
}
UTSFileUtils.getLength(path, (length)=>{
// 单位:字节byte
this.showMsg("getLength:" + path + " result:" + length)
})
- 读取文件内容
var path = "/sdcard/js/index.js"
if (!this.isAndroid) {
var docDir = plus.io.convertLocalFileSystemURL("_doc")
// Android获取的absPath以/结尾,iOS获取的absPath不是/结尾
if (docDir.endWith('/')) {
docDir = docDir.substring(0, docDir.length - 1)
}
path = docDir + "/loginSys/index.html"
}
UTSFileUtils.readFile2String(path, (str)=>{
this.showMsg("readFile2String:" + path + " result:" + str)
})
- 将字符串写入文件
var filePath = "/sdcard/bb.txt"
if (!this.isAndroid) {
var docDir = plus.io.convertLocalFileSystemURL("_doc")
// Android获取的absPath以/结尾,iOS获取的absPath不是/结尾
if (docDir.endWith('/')) {
docDir = docDir.substring(0, docDir.length - 1)
}
filePath = docDir + "/write/index.txt"
}
var content = "aaaa"
var append = true // 是否拼接在现有文件内容后面
UTSFileUtils.writeFileFromString(filePath, content, append, (suc)=>{
this.showMsg("writeFileFromString:" + filePath + " result:" + suc)
})
- 获取文件目录
var filePath = "/sdcard/bb.txt"
if (!this.isAndroid) {
var wwwDir = plus.io.convertLocalFileSystemURL("_www")
// Android获取的absPath以/结尾,iOS获取的absPath不是/结尾
if (wwwDir.endWith('/')) {
wwwDir = wwwDir.substring(0, wwwDir.length - 1)
}
filePath = wwwDir + "/static/loginSys/index.html"
}
UTSFileUtils.getDirName(filePath, (dirName)=>{
this.showMsg("getDirName:" + filePath + " result:" + dirName)
})
图片工具类
import {
UTSImageUtils
} from "@/uni_modules/wrs-uts-commonutils"
- 图片转Base64
注意: 有些android系统转出来的图片会以“data;image/png;base64,”为前缀,iOS没有这个前缀
var wwwDir = plus.io.convertLocalFileSystemURL("_www")
// Android获取的absPath以/结尾,iOS获取的absPath不是/结尾
if (wwwDir.endWith('/')) {
wwwDir = wwwDir.substring(0, wwwDir.length - 1)
}
var filePath = wwwDir + "/static/loginSys/images/logo.png"
// filePath = "https://t7.baidu.com/it/u=2604797219,1573897854&fm=193&f=GIF"
UTSImageUtils.image2Base64(filePath, (base64) => {
// ios中,图片的base64会以image2Base64:为前缀
this.showMsg("image2Base64:" + base64)
})
- Base64转图片
var base64Str =
"iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAFLSURBVHic7dyxbQIxHEbxzxYVNRukDAMQNmCRMAIzMALZgZoNThngWjagpoxThC4Jr0HyRXm/9qTzX0/2VdaVJFke1k8tH/ukbJLM879dk3YqqbtxO5zLV5y8J23Re7JpKZeSrGa3nWOcb9qipe3r7VjpR2VT4zfnnnntPcHUGQgYCBgIGAgYCBgIGAgYCBgIGAgYCBgIzB7xkvF1+PXZ8m39iCW6re0OAgYCBgIGAgYCBgIGAgYCBgIGAgYCBgIGAgYCBgIGAgYCBgIGAgYCBgIGAgYCBgIGAgYCBgIGAgYCBgIGAg+5H3TPvfs7f4E7CBgIGAgYCBgIGAiU58NL6z3ElLmDgIGAgYCBgIGAgYCBgIGAgYCBQE1y7T3EhF1r0k69p5iudqoldZeUS+9RpqdcSuqujtvhXJJV0o7xuCVfvwk8lmQ1bofzJxi+NCeqg7Y3AAAAAElFTkSuQmCC"
var filePath = "/sdcard/test/test.png"
if(!this.isAndroid) {
var docDir = plus.io.convertLocalFileSystemURL("_doc")
// Android获取的absPath以/结尾,iOS获取的absPath不是/结尾
if (docDir.endWith('/')) {
docDir = wwwDir.substring(0, docDir.length - 1)
}
// 复制文件时,只能复制到本目录
filePath = docDir + "/test/test.png"
console.log("filePath: " + filePath)
}
UTSImageUtils.base642Image(base64Str, filePath, (suc) => {
console.log("base642Image:" + suc)
})
设备工具类
import {
UTSDeviceUtils
} from "@/uni_modules/wrs-uts-commonutils"
- 获取设备ID
在iOS里除非系统重置可能会导致设备ID改变,app重装或升级系统都不会改变设备ID
let deviceID = UTSDeviceUtils.getDeviceID()
钥匙串工具类,仅支持iOS
钥匙串数据存储主要用于app删除重装后还能获取上次保存的数据
import {
UTSKeyChainUtils
} from "@/uni_modules/wrs-uts-commonutils"
- 保存值
例如:保存登录模块账号为zhangsan的密码
let value = "123xxx"
let service = "login_module"
let account = "zhangsan"
UTSKeyChainUtils.setValue(value, service, account)
- 获取值
let service = "login_module"
let account = "zhangsan"
let value = UTSKeyChainUtils.getValue(service, account)
- 删除值
let service = "login_module"
let account = "zhangsan"
UTSKeyChainUtils.deleteValue(service, account)