HarmonyOS鸿蒙Next中filePreview.openPreview预览沙盒内的mp4文件,预览失败

HarmonyOS鸿蒙Next中filePreview.openPreview预览沙盒内的mp4文件,预览失败 代码如下:

filePreview.openPreview(uiContext, fileInfo).then(() => {
  console.info('Succeeded in opening preview');
}).catch((openError: BusinessError) => {
  promptAction.showToast({
    message: '预览失败',
    duration: 2000
  });
});

fileInfo的值:

{"title":"xxx.mp4","uri":"file://com.minxing.h.product841/data/storage/el2/base/haps/phone/files/email/xxx.mp4","mimeType":"video/mp4"}

xxx.mp4这个文件确定在沙盒存在。

api版本:5.0.1(13)


更多关于HarmonyOS鸿蒙Next中filePreview.openPreview预览沙盒内的mp4文件,预览失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

下面是保存至沙箱,再预览MP4的demo,请运行看下, video2.mp4 为resources/rawfile 文件

import { filePreview } from '@kit.PreviewKit';
import { promptAction } from '@kit.ArkUI';
import { fileIo as fs, fileUri } from '@kit.CoreFileKit';
// let fileName: string = '1.txt';
// let fileName: string = 'sample.pdf';
// let fileName: string = 'test2.docx';
// let fileName: string = 'food.png';
let fileName: string = 'video2.mp4';
let context = getContext(this);
let fileDir = context.filesDir;     // 获取沙箱路径
let filePath = fileDir + '/' + fileName;
let uri = '';   // 获取uri

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  build() {
    Row() {
      Column() {
        Button('1、文件写入沙箱')
          .onClick(() => {
            this.rawToFile()
          })
        Button('2、openPreview')
          .onClick(async () => {
            let result = await filePreview.canPreview(context, uri);  // 传入uri,判断是否可预览
            console.log('result:'+result)
            if (result) {
              let previewInfo: filePreview.PreviewInfo = {
                title: fileName,
                uri: uri,
                // mimeType: 'text/plain'
                // mimeType: 'application/pdf'
                // mimeType: 'application/msword'
                // mimeType: 'image/png'
                mimeType: 'video/mp4'
              }
              filePreview.openPreview(getContext(this), previewInfo)
                .then(() =>{
                  console.log('预览成功')
                });  // 打开预览
            } else {
              promptAction.showToast({   // 不可预览
                message: '文件不可预览'
              });
            }
          })
      }
      .width('100%')
    }
    .height('100%')
  }

  rawToFile() {
    console.log('filePath:' + filePath)
    context.resourceManager.getRawFileContent(fileName, (_err, value) => {
      let myBuffer: ArrayBufferLike = value.buffer
      console.log("filePath:" + filePath);
      let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
      let writeLen = fs.writeSync(file.fd, myBuffer);
      console.info("写入数据和文件成功:" + writeLen);
      uri=fileUri.getUriFromPath(filePath)
      console.log('uri:'+uri)
      console.log('沙箱写入成功')
      fs.closeSync(file);
    });
  }
}

更多关于HarmonyOS鸿蒙Next中filePreview.openPreview预览沙盒内的mp4文件,预览失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,filePreview.openPreview用于预览文件,但预览沙盒内的MP4文件失败,可能是由于以下原因:

  1. 沙盒权限限制:沙盒环境对文件访问有严格限制,filePreview.openPreview可能无法直接访问沙盒内的文件。需要确认文件路径是否正确,并且确保应用具备访问沙盒文件的权限。

  2. 文件路径问题:沙盒内的文件路径可能是临时路径或相对路径,openPreview可能无法识别。需要确保文件路径是绝对路径,并且文件确实存在于指定位置。

  3. 文件格式支持:虽然MP4是常见格式,但filePreview.openPreview可能对某些编码或封装的MP4文件支持不完整。可以检查文件编码格式是否符合鸿蒙系统的支持范围。

  4. API调用错误:filePreview.openPreview的调用方式可能有误,例如参数传递不正确或未正确处理回调。需要检查API调用是否符合官方文档要求。

  5. 系统版本兼容性:鸿蒙Next版本可能存在兼容性问题,某些功能在特定版本中尚未完全实现或存在Bug。可以检查系统版本是否与API文档中的要求一致。

  6. 沙盒文件状态:沙盒内的文件可能处于未完全写入或锁定状态,导致预览失败。需要确保文件已完整写入且未被其他进程占用。

  7. 日志信息缺失:如果未捕获或查看相关日志信息,可能无法准确判断失败原因。可以检查系统日志或调试信息以获取更多线索。

以上是可能导致filePreview.openPreview预览沙盒内MP4文件失败的常见原因,具体问题需结合实际情况分析。

在HarmonyOS鸿蒙Next中,使用filePreview.openPreview预览沙盒内的MP4文件失败,可能原因包括:

  1. 文件路径错误:确保传入的文件路径正确,且文件存在于沙盒中。
  2. 权限问题:检查应用是否具备访问沙盒文件的权限。
  3. 文件格式不支持:确认MP4文件格式是否被filePreview支持。
  4. API调用错误:检查openPreview的调用方式是否正确,参数是否符合要求。

建议逐步排查上述问题,确保文件路径、权限和API调用均正确无误。

回到顶部