didi / didi/dimina

[Feature]: 建议补全 FileSystemManager 实例方法的完整支持(access / mkdir / readFile / writeFile / unlink 等)

Open
#335 0 comments 0 reactions 1 assignee Claimed by @dos1in View on GitHub
enhancement
Dominant language
JavaScript
Stars
933
Forks
99
Avg merge
1d 2h
Merged PRs (30d)
14

Description

### 目标模块 / Component

Android SDK

### 背景与问题 / Problem

场景需要在本地持久化缓存(单文件 200KB~2MB)USER_DATA_PATH 目录,
进入页面优先读缓存渲染,再异步校验服务端版本号更新缓存。该方案在微信官方运行时完全可用,但在 dimina 环境下:
无法创建/确认缓存目录(mkdir/access 缺失);
无法读写缓存文件(readFile/writeFile 缺失);
无法清理写入失败的临时文件(unlink 缺失)。
即文件缓存方案在 dimina 上完全不可落地,业务只能回退到 Storage(单 key 1MB 上限,直接超限)或不缓存(每次进页面走网络,首屏慢)。

### 建议方案 / Proposed Solution

按微信官方 FileSystemManager 规范,补齐实例方法的透传实现,建议优先级:
P0:readFile、writeFile(utf8 encoding,含 Promise/回调两种风格)——缓存读写核心;
P0:mkdir、access——目录初始化与存在性检查;
P1:unlink——临时文件清理;
P2:readdir、stat、rmdir、copyFile、rename——对齐能力面。

### 使用示例与验收标准 / Use Case and Acceptance Criteria

使用示例(与微信官方一致):
const fs = wx.getFileSystemManager()
const BASE = `${wx.env.USER_DATA_PATH}/form-cache`

fs.access({ path: BASE, fail: () => fs.mkdir({ dirPath: BASE, recursive: true }) })

fs.writeFile({
filePath: `${BASE}/app1_formA.json`,
data: JSON.stringify(formObject),
encoding: 'utf8',
success: () => {},
})

fs.readFile({
filePath: `${BASE}/app1_formA.json`,
encoding: 'utf8',
success: res => { const form = JSON.parse(res.data) },
fail: err => { /* 回退网络获取 */ },
})

### 目标平台 / Target Platforms

Android

### 兼容性与影响 / Compatibility and Impact

影响范围:纯新增能力,不改变现有 saveFile/openDocument 行为,对存量业务无回归风险;
平台差异:需确认目标端的可写目录映射(对应 USER_DATA_PATH)及容量限制,如有配额差异建议在文档中明示;
收益:解锁大体量 本地缓存类方案(类似离线数据等),弥补 Storage 单 key 1MB 上限的能力空缺。

### 替代方案 / Alternatives

_No response_

### 是否愿意参与实现 / Contribution

None

### 参考资料或附件 / References

_No response_

### 补充信息 / Additional Context

_No response_

### 提交检查 / Checklist

- [x] 我已搜索现有 Issues,确认没有相同建议。
- [x] 这是一项明确的功能建议,而不是使用咨询或故障报告。

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.