更新记录

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库:

  1. 下载LZString库:https://github.com/pieroxy/lz-string
  2. lz-string.min.js 复制到项目中
  3. 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后返回存储信息对象

存储策略

  1. 普通存储:数据大小 ≤ 1MB
  2. 分片存储:1MB < 数据大小 ≤ 10MB
  3. 文件系统存储:数据大小 > 10MB

注意事项

  1. 跨平台兼容性

    • H5平台:使用localStorage和IndexedDB
    • 微信小程序:使用wx.setStorage和wx.getFileSystemManager
    • App平台:使用plus.storage和plus.io
  2. 性能考虑

    • 大数据存储可能需要较长时间,请在适当的时机进行
    • 建议在非UI线程或使用异步方式处理大数据存储
  3. 错误处理

    • 所有方法都返回Promise,请务必使用try/catch捕获错误
    • 网络环境不佳时,文件系统操作可能失败

问题解决

Q: 存储大数据时提示失败?

A: 检查数据大小是否超过了平台限制,工具会自动处理分片存储,但某些平台可能有更严格的限制。

Q: 读取数据时返回null?

A: 检查键名是否正确,或者数据是否已被删除。

Q: 在H5平台无法使用文件系统?

A: H5平台的文件系统支持有限,建议在H5平台使用分片存储。

许可证

MIT License

隐私、权限声明

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

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

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

许可协议

MIT协议

暂无用户评论。