更新记录

1.0.9(2025-06-30)

  1. 重新调整接口结构
  2. 增加harmony支持
  3. 增肌路径工具类

1.0.8(2023-10-05)

  1. 修复Android新版基座语法兼容性问题

1.0.7(2023-09-18)

  1. 原始返回图片与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)

如需更多常用工具类接口,请点击"进入交流群"联系作者

集成步骤

常用文件处理插件

  1. 文件预览https://ext.dcloud.net.cn/plugin?id=17167

    • 支持pdf/word/excel/ppt/图片,支持本地或在线文件
  2. 文件增删查改copy遍历https://ext.dcloud.net.cn/plugin?id=14130

    • 文件读写、copy、move、遍历文件夹、是否存在、删除、重命名......等等
  3. 读取常用文件目录(包含U盘)https://ext.dcloud.net.cn/plugin?id=15243

    • uniapp(_www、_doc、_download)
    • Android(数据目录、文件目录、缓存目录、环境environment目录、SDCard目录、外接U盘)
    • iOS(documentDirectory、temporaryDirectory、libraryDirectory、cachesDirectory)
    • 从U盘读取或保存文件
  4. 读取本地相册图片视频音频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))
    }
})

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))
    }
})

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))
    }
})

隐私、权限声明

1. 本插件需要申请的系统权限列表:

android: 文件读写权限 harmony: ohos.permission.STORE_PERSISTENT_DATA、ohos.permission.APP_TRACKING_CONSENT

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问