【鸿蒙二开】WPS SDK 关闭回传 URI/FD 实战
应用内拉起 WPS 编辑文档后,若需要把用户关闭文档时的最新内容拿回业务层,就要配置 WPS Open SDK 的关闭回传。不少二开同学只做了 OpenFileRequest 打开,没处理回调,导致「保存了但上传还是旧文件」。本文把 URI/FD 两种回传和 filePath 落盘要点浓缩成帖,适合已能打开文档、还差「关窗回写」这一步的鸿蒙开发者。
什么时候需要回传
- 编辑后要上传服务器、走审批流、写回业务数据库 → 需要关闭回传。
- 纯预览、不要求应用侧拿新文件 → 可不配置,拉起成功即返回。
政企合同、报销单据、现场巡检报告等场景,往往属于前者。若产品文档只写了「集成 WPS 打开」,评审时记得追问「关窗后文件去哪了」,避免上线前才发现缺口。
怎么开与回调语义
在 OpenFileRequest 上设置 wpsTransferType(推荐)或 enableTransferFile。sendRequest 返回后:code === OK 且未开回传时 data 为空;开启回传且用户关闭文档后,data.fileUri 或 transferFd 等有值。fileUri 位于 WPS 沙箱,须 copyFileSync 到本应用 filesDir 后再用于上传或展示。
const req = new OpenFileRequest(ctx, sandboxPath);
req.enableEdit = true;
req.wpsTransferType = TransferType.URI;
const result = await WPSApi.sendRequest(req);
if (result.code !== ResultCode.OK) { /* 处理失败 */ }
const path = result.data?.fileUri
? copyWpsUriToSandbox(ctx, result.data.fileUri)
: undefined;URI、FD 与推荐流程
URI:调试简单,适合多数 Word/表格。FD:少暴露路径,分块读并 close fd。流程:检查 code → 无 data 按仅打开处理 → FD 或 URI 拷贝到沙箱 → 用新 filePath 更新业务。专业版不落地时 URI 拷贝后建议删 WPS 临时文件。拷贝目标目录建议固定为 filesDir/wps_callback/ 并在应用卸载策略里考虑清理周期,避免沙箱膨胀。
踩坑、测试与相关能力
未关文档就切回应用会收不到回传;仍用打开前 path 会传旧版;须 catch 失败分支。联调时 Word、表格各测 URI/FD,核对 transferFileSize。关闭回传可与 extraOptions、水印同请求配置;专业版不落地时拷贝后清理 WPS 临时文件。个人版 API 一致,注意 HAR 版本。UI 上可加「请关闭 WPS 完成保存」提示;大文件 FD 回传注意分块读与 closeSync,防止 fd 泄漏导致后续打开失败。
小结
关闭回传是鸿蒙 WPS 二开「编辑闭环」的核心能力,与 enableEdit、extraOptions 可同请求配置。统一版 SDK 专业版与个人版 API 一致,便于一套代码多场景复用。实施时优先在测试机验证「关窗 → 回调 → 拷贝 → 上传」全链路,再放开生产。遇到问题可先查 result.code 与是否收到 data,再查沙箱目录权限与 fd 是否关闭。社区里欢迎交流不同 ROM 上的回传表现与兼容经验。
更多参数见官方对接文档:https://365.kdocs.cn/l/clQl5cek2NoT
申请 SDK HAR 与凭据:m_open_sdk@wps.cn(注明包名与专业版/个人版需求)。
技术交流 QQ 群:628436767