HarmonyOS filePreview预览服务预览 word, excel 等文件失败?

filePreview预览服务不支持预览 word, excel 等文件吗? 打开这类文件应该怎么做 ?

阅读 435
1 个回答

目前新版本中filePreview预览word、excel能力已落地,文档中暂未体现,还请参考以下demo试下:

import common from '@ohos.app.ability.common';
import fs from '@ohos.file.fs';
import { filePreview } from '@kit.PreviewKit';
import { BusinessError } from '@kit.BasicServicesKit';
import fileUri from '@ohos.file.fileuri';

let context = getContext(this) as common.UIAbilityContext;
let uiContext = getContext(this);
let fileInfo: filePreview.PreviewInfo = {
  // 文件预览信息,包含了文件标题名、uri以及文件类型(mimeType)
  title: '2.docx',
  // title: '1.xls',
  // title: '1.pdf',
  // uri: 'file://com.example.api12demo/data/storage/el2/base/haps/entry/files/1.pdf',
  uri:'file://com.example.api12demo/data/storage/el2/base/haps/entry/files/2.docx',
  //    uri: 'file://com.example.api12demo/data/storage/el2/base/haps/entry/files/1.xls',
  // mimeType: 'application/pdf' // 文件(夹)的媒体资源类型,如text/plain
  // mimeType: 'application/vnd.ms-excel' // 文件(夹)的媒体资源类型,如text/plain
  mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' // 文件(夹)的媒体资源类型,如text/plain
};



function copyFile() {
  console.log("copyFile!")
  // let srcFileDescriptor = context.resourceManager.getRawFdSync("1.pdf");
  let srcFileDescriptor = context.resourceManager.getRawFdSync("2.docx");
  // let srcFileDescriptor = context.resourceManager.getRawFdSync('1.xls');
  //这里填rawfile文件夹下的文件名(包括后缀)
  let stat = fs.statSync(srcFileDescriptor.fd)
  console.log(`stat isFile:${stat.isFile()}`);
  // 通过UIAbilityContext获取沙箱地址filesDir,以Stage模型为例
  let pathDir = context.filesDir;
  console.log("path:", pathDir)
  // let dstPath = pathDir + "/1.pdf";
  // let dstPath = pathDir + "/1.xls";
  let dstPath = pathDir + "/2.docx";
  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
  console.log('dstPath---',dstPath)
  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
    }
  }
  console.log('=========close=========')
  fs.close(dest.fd)
}


@Entry
@Component
struct Index {
  @State message: string = '预览文件';

  build() {
    Row() {
      Column() {
        Button('传到沙箱')
          .onClick(()=>{
            copyFile()
          })
        Button(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            filePreview.openPreview(uiContext, fileInfo).then(() => {
              console.info('openPreview success');
            }).catch((err: BusinessError) => {
              console.error('openPreview failed, err = ' + err.message);
            });
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进