HarmonyOS 鸿蒙Next中HTML套壳的软件导出文件问题

HarmonyOS 鸿蒙Next中HTML套壳的软件导出文件问题 大佬们,为什么我的这个软件点击导出Word之后导出的文件是空的啊


更多关于HarmonyOS 鸿蒙Next中HTML套壳的软件导出文件问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

你好,应该是没有对文件进行写入操作。

在 documentPicker.save 时获取到的是保存路径,需要将你的文档数据写入到这个路径中,才能完成真正的文件保存。可以看看下面demo, 写入一段文本到文档。

@Entry
@Component
struct Index {
  build() {
    Column() {
      Text('测试保存')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .onClick(() => {
          try {
            const saveOptions = new picker.DocumentSaveOptions();
            saveOptions.newFileNames = ['我的word文档.docx'];
            const documentPicker = new picker.DocumentViewPicker(this.getUIContext().getHostContext()!);
            documentPicker.save(saveOptions).then((documentSaveResult: Array<string>) => {
              const uri = documentSaveResult[0];
              const file = fileIo.openSync(uri, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE)
              fileIo.writeSync(file.fd, '这里简单写入一段文本,你需要改为自己的内容')
              fileIo.closeSync(file)
            }).catch((err: BusinessError) => {
              console.error('failed: ' + JSON.stringify(err));
            });
          } catch (err) {
            console.error('failed: ' + JSON.stringify(err));
          }
        })
    }
    .padding(50)
  }
}

更多关于HarmonyOS 鸿蒙Next中HTML套壳的软件导出文件问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next中,HTML套壳应用(如基于WebView的混合应用)导出文件需使用Web组件的文件选择器(FileSelector)能力。通过调用系统文件访问接口,触发onReceiveFile事件或使用fileAccess模块获取用户授权路径。注意鸿蒙Next的沙箱策略,导出文件需写入应用沙箱或通过MediaLibrary保存至公共目录。

鸿蒙Next的Web组件默认不允许前端直接通过下载行为保存文件,点击导出Word时若仍用传统Blob触发下载,文件数据无法写入系统存储,最终生成0字节空文件。

正确做法是让前端生成Word内容后,通过JSBridge将数据(如Base64)传给原生侧,原生代码使用filePickerfs.open写入沙箱或公共目录。需在module.json5中申明ohos.permission.WRITE_MEDIAohos.permission.FILE_ACCESS_MANAGER权限。
另外检查前端生成Word的库(如docx.js)是否兼容鸿蒙Web引擎,不兼容的DOM操作可能导致内容为空,建议用console打日志确认前端数据是否正常生成。

回到顶部