更新记录
1.0.0(2025-10-24) 下载此版本
Uniapp 存储管理工具 一个功能强大的Uniapp本地存储管理工具,解决了uni.setStorage 1MB限制问题,支持大数据分片存储、文件系统存储和数据压缩。
特性 自动分片存储:超过1MB的数据数据自动分片存储 文件系统支持:超大文件(>10MB)自动使用文件系统存储 数据压缩:支持LZString压缩算法,减小数据体积 跨平台兼容:支持H5、微信小程序、支付宝小程序、App等多个平台 智能存储策略:根据数据大小自动选择最佳存储方式 完整的API:提供存储、读取、删除、清理等全套功能 安装 方式一:直接引入 将 storage-manager.js 文件复制到你的项目中,然后在需要使用的地方引入:
import storageManager from '@/utils/storage-manager.js'; 方式二:使用npm(推荐) npm install uniapp-storage-manager --save
平台兼容性
Uniapp 存储管理工具
一个功能强大的Uniapp本地存储管理工具,解决了uni.setStorage 1MB限制问题,支持大数据分片存储、文件系统存储和数据压缩。
特性
- 自动分片存储:超过1MB的数据数据自动分片存储
- 文件系统支持:超大文件(>10MB)自动使用文件系统存储
- 数据压缩:支持LZString压缩算法,减小数据体积
- 跨平台兼容:支持H5、微信小程序、支付宝小程序、App等多个平台
- 智能存储策略:根据数据大小自动选择最佳存储方式
- 完整的API:提供存储、读取、删除、清理等全套功能
安装
方式一:直接引入
将 storage-manager.js 文件复制到你的项目中,然后在需要使用的地方引入:
import storageManager from '@/utils/storage-manager.js';
方式二:使用npm(推荐)
npm install uniapp-storage-manager --save
使用方法
基本使用
// 引入
import storageManager from '@/utils/storage-manager.js';
// 存储数据
async function saveData() {
try {
// 存储普通数据
await storageManager.setStorage('user_info', {
name: '张三',
age: 25,
avatar: 'https://example.com/avatar.jpg'
});
// 存储大数据(超过1MB会自动分片)
const largeData = {
content: '这是一个非常大的数据...'.repeat(10000), // 约1.5MB
metadata: {
timestamp: Date.now(),
version: '1.0.0'
}
};
await storageManager.setStorage('large_data', largeData);
console.log('数据存储成功');
} catch (error) {
console.error('数据存储失败:', error);
}
}
// 读取数据
async function loadData() {
try {
const userInfo = await storageManager.getStorage('user_info');
console.log('用户信息:', userInfo);
const largeData = await storageManager.getStorage('large_data');
console.log('大数据数据大小:', new Blob([JSON.stringify(largeData)]).size);
} catch (error) {
console.error('数据读取失败:', error);
}
}
// 删除数据
async function deleteData() {
try {
await storageManager.removeStorage('user_info');
console.log('数据删除成功');
} catch (error) {
console.error('数据删除失败:', error);
}
}
// 获取存储信息
async function getStorageInfo() {
try {
const info = await storageManager.getStorageInfo();
console.log('存储信息:', info);
} catch (error) {
console.error('获取存储信息失败:', error);
}
}
// 清理所有存储
async function clearAllStorage() {
try {
await storageManager.clearStorage();
console.log('所有存储已清理');
} catch (error) {
console.error('清理存储失败:', error);
}
}
自定义配置
import { StorageManager } from '@/utils/storage-manager.js';
// 创建自定义配置的实例
const customStorage = new StorageManager({
singleLimit: 512 * 1024, // 单个存储项限制 512KB
chunkSize: 64 * 1024, // 分片大小 64KB
compress: true, // 启用压缩
useFileForLargeData: true, // 使用文件系统存储大文件
fileThreshold: 5 * 1024 * 1024 // 文件系统阈值 5MB
});
// 使用自定义配置的实例
async function saveWithCompression() {
try {
const largeText = '大量文本数据...'.repeat(20000);
await customStorage.setStorage('compressed_data', largeText);
console.log('压缩存储成功');
} catch (error) {
console.error('压缩存储失败:', error);
}
}
数据压缩支持
如果需要使用数据压缩功能,需要引入LZString库:
- 下载LZString库:https://github.com/pieroxy/lz-string
- 将
lz-string.min.js复制到项目中 - 在
main.js中引入:
import './utils/lz-string.min.js';
// 全局挂载
Vue.prototype.$LZString = LZString;
API 文档
setStorage(key, data)
存储数据。
key: 存储键名(字符串)data: 要存储的数据(任意类型)- 返回: Promise对象
getStorage(key)
读取数据。
key: 存储键名(字符串)- 返回: Promise对象,resolve后返回存储的数据
removeStorage(key)
删除数据。
key: 存储键名(字符串)- 返回: Promise对象
clearStorage()
清理所有存储。
- 返回: Promise对象
getStorageInfo()
获取存储信息。
- 返回: Promise对象,resolve后返回存储信息对象
存储策略
- 普通存储:数据大小 ≤ 1MB
- 分片存储:1MB < 数据大小 ≤ 10MB
- 文件系统存储:数据大小 > 10MB
注意事项
-
跨平台兼容性:
- H5平台:使用localStorage和IndexedDB
- 微信小程序:使用wx.setStorage和wx.getFileSystemManager
- App平台:使用plus.storage和plus.io
-
性能考虑:
- 大数据存储可能需要较长时间,请在适当的时机进行
- 建议在非UI线程或使用异步方式处理大数据存储
-
错误处理:
- 所有方法都返回Promise,请务必使用try/catch捕获错误
- 网络环境不佳时,文件系统操作可能失败
问题解决
Q: 存储大数据时提示失败?
A: 检查数据大小是否超过了平台限制,工具会自动处理分片存储,但某些平台可能有更严格的限制。
Q: 读取数据时返回null?
A: 检查键名是否正确,或者数据是否已被删除。
Q: 在H5平台无法使用文件系统?
A: H5平台的文件系统支持有限,建议在H5平台使用分片存储。
许可证
MIT License

收藏人数:
下载插件并导入HBuilderX
下载插件ZIP
赞赏(0)
下载 0
赞赏 0
下载 10630604
赞赏 1792
赞赏
京公网安备:11010802035340号