HarmonyOS 鸿蒙Next 文件预览问题

HarmonyOS 鸿蒙Next 文件预览问题

使用filePreview.canPreview对文件能否进行预览进行判断,传入的文件uri如果是doc或者pdf文件的,也会返回true,但是看文档是不支持的类型,这个应该怎么解决 https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/preview-arkts-V5


更多关于HarmonyOS 鸿蒙Next 文件预览问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

可参考如下代码:

import common from '[@ohos](/user/ohos).app.ability.common';
import fs from '[@ohos](/user/ohos).file.fs';
import { filePreview } from '[@kit](/user/kit).PreviewKit';
import { BusinessError } from '[@kit](/user/kit).BasicServicesKit';
import { fileUri } from '[@kit](/user/kit).CoreFileKit';
import { promptAction } from '[@kit](/user/kit).ArkUI';

[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index {
 [@State](/user/State) message: string = '预览文件';
 [@State](/user/State) src: string = ''

 copyFile() {
   console.log("copyFile!")
   let srcFileDescriptor = getContext().resourceManager.getRawFdSync("6.pdf");

   //这里填rawfile文件夹下的文件名(包括后缀)
   let stat = fs.statSync(srcFileDescriptor.fd)
   console.log(`stat isFile:${stat.isFile()}`);
   // 通过UIAbilityContext获取沙箱地址filesDir,以Stage模型为例
   let pathDir = getContext().filesDir;

   console.log("path:", pathDir)

   let dstPath = pathDir + "/" + Date.now() + ".pdf";

   this.src = fileUri.getUriFromPath(dstPath)
   console.log("this.src:", this.src)
   let dest = fs.openSync(dstPath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE)

   let bufsize = 4096

   let buf = new ArrayBuffer(bufsize)

   let off = 0, len = 0, readedLen = 0

   while (len = fs.readSync(srcFileDescriptor.fd, buf, { offset: srcFileDescriptor.offset + off, length: bufsize })) {

     readedLen += len

     fs.writeSync(dest.fd, buf, { offset: off, length: len })

     off = off + len

     if ((srcFileDescriptor.length - readedLen) < bufsize) {

       bufsize = srcFileDescriptor.length - readedLen

     }

   }

   fs.close(dest.fd)
   promptAction.showToast({ message: `传入成功` })
 }

 build() {

   Row() {

     Column({ space: 10 }) {

       Button('传到沙箱')

         .onClick(() => {

           this.copyFile()

         })
         .fontSize(50)

       Button(this.message)

         .fontSize(50)

         .fontWeight(FontWeight.Bold)

         .onClick(() => {
           let fileInfo: filePreview.PreviewInfo = {
             // 文件预览信息,包含了文件标题名、uri以及文件类型(mimeType)
             title: '6.pdf',

             uri: this.src,

             mimeType: 'application/pdf' // 文件(夹)的媒体资源类型,如text/plain
           };
           filePreview.openPreview(getContext() as common.UIAbilityContext, fileInfo).then(() => {

             console.info('openPreview success');

           }).catch((err: BusinessError) => {

             console.error('openPreview failed, err = ' + err.message);

           });

         })

     }

     .width('100%')

   }

   .height('100%')

 }
}

更多关于HarmonyOS 鸿蒙Next 文件预览问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对HarmonyOS 鸿蒙Next文件预览问题,以下是一些可能的解决方案:

  1. 文件格式支持: 确保所预览的文件格式已被鸿蒙Next系统内置支持。若文件格式特殊或罕见,可能需要安装第三方应用以进行预览。

  2. 文件路径与权限: 检查文件存储路径是否正确,以及应用是否拥有访问该路径的权限。路径错误或权限不足均可能导致预览失败。

  3. 文件损坏: 文件本身可能已损坏,导致无法预览。尝试用其他应用或设备打开该文件,以验证其完整性。

  4. 系统更新: 检查鸿蒙Next系统是否为最新版本。旧版本可能存在预览功能的bug,更新至最新版可能解决问题。

  5. 应用兼容性: 若使用第三方应用进行预览,检查该应用是否与鸿蒙Next系统兼容。不兼容的应用可能导致预览功能异常。

  6. 重启设备: 尝试重启设备,以清除可能的临时故障或缓存问题,有时这能解决预览功能的问题。

如果上述方法均未能解决HarmonyOS 鸿蒙Next文件预览问题,请联系官网客服获取进一步帮助。官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部