HarmonyOS 鸿蒙Next:保存线上PDF至文件管理download目录后无法查看问题 HarmonyOS 鸿蒙Next:首次保存线上PDF至download目录可查看,多次保存后文档无法打开,WPS提示格式错误或内容损坏

发布于 1周前 作者 songsunli 来自 鸿蒙OS

HarmonyOS 鸿蒙Next:保存线上PDF至文件管理download目录后无法查看问题
HarmonyOS 鸿蒙Next:首次保存线上PDF至download目录可查看,多次保存后文档无法打开,WPS提示格式错误或内容损坏

import { fileIo, fileUri, picker } from '@kit.CoreFileKit';
import { BusinessError, request } from '@kit.BasicServicesKit';
import { promptAction } from '@kit.ArkUI';
import { webview } from '@kit.ArkWeb';
import { JSON } from '@kit.ArkTS';

@Entry
@Component
struct indexPage {

  webContorller: WebviewController = new webview.WebviewController()
  fileSrc = "https://www.gov.cn/zhengce/pdfFile/2023_PDF.pdf"

  build() {
    Column({ space: 10 }) {
      Scroll() {
        Web({ src: this.fileSrc, controller: this.webContorller })
          .domStorageAccess(true)
      }.layoutWeight(1)

      Button('保存到本机目录').onClick(() => {
        let fileAddr = this.fileSrc.split('//')[1]
        let fileName = fileAddr.split('/')[fileAddr.split('/').length - 1]

        if (fileIo.accessSync(getContext(this).cacheDir + '/' + fileName)) {
          fileIo.unlinkSync(getContext(this).cacheDir + '/' + fileName)
        }
        // 文件下载到应用沙箱
        request.downloadFile(getContext(this),
          { url: this.fileSrc, filePath: getContext(this).cacheDir + '/' + fileName }, (err, res) => {
            res.on('fail', (reject) => {
              console.log('文件下载 下载失败 --' + reject)
            })
            res.on('progress', (resolve) => {
              console.log('文件下载 下载成功 --' + resolve)
            })
          })

        let documentOptions = new picker.DocumentSaveOptions()
        documentOptions.pickerMode = picker.DocumentPickerMode.DOWNLOAD

        let documentPicker = new picker.DocumentViewPicker()

        try {
          documentPicker.save(documentOptions, (err: BusinessError, DocumentSaveResult: Array<string>) => {
            DocumentSaveResult.forEach(uri => {
              console.log('文件下载 uri ' + JSON.stringify(uri))

              let file = fileIo.openSync(getContext(this).cacheDir + '/' + fileName,
                fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
              console.log('文件下载 file地址 ---' + getContext(this).cacheDir + '/' + fileName)
              let path: string = new fileUri.FileUri(uri).path
              if (fileIo.accessSync(path + '/' + file.name)) {
                fileIo.unlinkSync(path + '/' + file.name)
              }
              console.log('文件下载 file2地址--- ' + path + '/' + file.name)
              let file2 = fileIo.openSync(path + '/' + file.name, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE)
              console.log('文件下载 文件管理存在' + fileIo.accessSync(path + '/' + file.name))
              fileIo.copyFileSync(file.fd, file2.fd)
              fileIo.closeSync(file2);
              fileIo.closeSync(file);
              promptAction.showToast({
                message: '保存成功'
              })
            })
          })
        } catch (err) {
          console.log('文件下载 报错 ' + JSON.stringify(err))
        }
      })
    }
    .width('100%')
    .height('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next:保存线上PDF至文件管理download目录后无法查看问题 HarmonyOS 鸿蒙Next:首次保存线上PDF至download目录可查看,多次保存后文档无法打开,WPS提示格式错误或内容损坏的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

我们用最新版本测了下,没复现出来,你的rom和ide具体版本号多少

更多关于HarmonyOS 鸿蒙Next:保存线上PDF至文件管理download目录后无法查看问题 HarmonyOS 鸿蒙Next:首次保存线上PDF至download目录可查看,多次保存后文档无法打开,WPS提示格式错误或内容损坏的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


DevEco Studio 5.0.0 Release
Build #DS-233.14475.28.36.503910
构建版本:5.0.3.910, built on November 1, 2024
Runtime version: 17.0.12+1-b1087.25 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Windows 11.0
GC: G1 Young Generation, G1 Old Generation
Memory: 4052M
Cores: 8
Registry:
  idea.plugins.compatible.build=IC-233.14475.28

HarmonyOS 5.0.0 Release SDK,基于OpenHarmony SDK Ohos_sdk_public 5.0.0.71 (API Version 12 Release),

排查下,保存文件前后文件大小是不是一致的吧,

感谢指导; 已解决, 文件下载应该写在 request.downloadFile 的onProgress中; 就是因为文件没下载完, 才会保存失败;

我复制你的代码试了,多次点击“保存到本机目录”都是正常的
你的IDE和OS版本是多少,升级到最新的试一下呢

那就奇怪了;我这边环境是新装的, ide也是新下载的;sdk 12的;

我试了很多次,只有中间不开debug的时候触发了两次,之后怎么也复现不了了
你那边是偶现问题还是多次复现呢?

昨天五次能有三次保存失败; 今天十次中有一次失败; 大概的几率, 并不是固定的,

针对“HarmonyOS 鸿蒙Next:保存线上PDF至文件管理download目录后无法查看问题”,可能的原因及解决方案如下:

  1. 文件写入权限问题:首次保存时,系统可能已授予写入权限。多次保存后,若权限被回收或更改,可能导致文件写入不完整。请检查应用是否有持续的写入权限。

  2. 文件路径或命名冲突:多次保存时,如果文件名未改变,可能导致新文件覆盖旧文件但写入未完成,造成文件损坏。尝试更改文件名或使用时间戳生成唯一文件名。

  3. PDF文件损坏:线上PDF文件可能在传输过程中损坏,或源文件本身存在问题。检查源文件是否能在其他设备上正常打开。

  4. WPS软件兼容性问题:WPS可能无法兼容某些特定格式的PDF文件,或对新版本的PDF特性支持不足。尝试使用其他PDF阅读器打开文件。

  5. 系统缓存问题:系统缓存可能导致文件读取异常。尝试清理系统缓存或重启设备后查看。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部