首页 > 其他分享 >《鸿蒙/Harmony | 开发日志》预览文件

《鸿蒙/Harmony | 开发日志》预览文件

时间:2024-09-25 10:01:30浏览次数:8  
标签:文件 const 预览 鸿蒙 uri ext Harmony

APP 中常有需求就是点击文件打开预览。

鸿蒙中,可以借助访问的预览文件服务来实现。

测试下来,常见的文档类型txt, doc, excel, ppt,pdf, 图片,视频等都是默认可以打开的。遇到不能打开的,界面也会按钮是否使用其他 APP 来打开。

支持的文件类型

官方文档列出的支持类型,实际测试下来,除了下面的列表,对doc, ppt, excel, pdf等文件都是直接支持的(没有安装过wps)。

遇到不支持的文件类型也没有关系,在预览不了的时候,界面有一个使用其他其他应用,或者保存本地的功能。

代码实现

将一个本地的文件,使用预览服务预览。注意这里的文件,必须是当前应用有权限获取的文件,无论是用户选择的文件,或者是 APP 下载的文件保存在 APP 本身的缓存目录中的。至于如何下载文件,是另一个篇幅的事情。本章节的是一个已经存在的本地文件。

预览文件的代码


// 本地真是存在的文件
const filePath = ""

// 需要将文件转换成文件uri
const uri = fileUri.getUriFromPath(filePath)
// 当前文件是否支持预览。这一步可以省略。看个人需求,就算不支持也是可以打开预览界面的。
// 但是这里要注意的是确保文件路径一定要存在。如果上面的文件不存在,isCan也是false的
const isCan = await filePreview.canPreview(this.context.uiAbilityContext, uri)

if(!isCan) {
	// todo: 不支持如何处理
}
// 根据文件的名称获取文件的MIMEType,方法实现见下文章节
const mimeType = getMimeTypeByFileName(fileName)

let fileInfo: filePreview.PreviewInfo = {
		title: fileName,
		uri: uri,
		mimeType: mimeType
};

const uiAbilityContext = getContext(this);

filePreview.openPreview(uiAbilityContext, fileInfo).catch((err: BusinessError) => {
		this.alert({ message: `文件: ${fileName}, 无法预览,原因: ${err.message}` })
});

根据真实文件地址获取文件uri

文件uri是鸿蒙特色的为了隐藏真是文件地址设计的。一般遇到文件处理的时候,可以都会遇到文件地址和文件uri互相转换的过程。可以参考《【鸿蒙官方文档】用户文件uri介绍

根据文件的后缀名获取MIMEType

因为文件预览服务是需要知道MIMEType的,官方提供了《如何通过文件后缀获取对应的MIMEType列表》,我们只需要获取后缀名,再调用官方 API 即可:

export function getExtension(filename: string, includeDot = false): string {
    const dot = '.'
    if (filename.lastIndexOf(dot) == -1) {
        return ""
    }

    const ext = filename.split(dot).pop()
    return includeDot ? "." + ext : ext
}


export function getMimeTypeByFileName(name: string) {
    const ext = getExtension(name)
    return getMimeTypeByExtension(ext)
}

export function getMimeTypeByExtension(ext: string) {
    if (!ext.startsWith(".")) {
        ext = "." + ext
    }
    let typeId = uniformTypeDescriptor.getUniformDataTypeByFilenameExtension(ext);
    let typeObj = uniformTypeDescriptor.getTypeDescriptor(typeId);
    let mimeTypes = typeObj.mimeTypes;

    return mimeTypes[0]
}

预览效果图

PDF

图片

无法预览的文件

参考

  1. 【鸿蒙官方文档】文件预览
  2. 【鸿蒙官方文档】预览服务 - API
  3. 【鸿蒙官方文档】用户文件uri介绍
  4. 【鸿蒙官方文档】标准化数据类型

标签:文件,const,预览,鸿蒙,uri,ext,Harmony
From: https://www.cnblogs.com/xakoy/p/18430742

相关文章

  • 技术解读:华为云如何携手昇腾、鸿蒙等根生态,助力开发者技术创新
    摘要:分享在华为云上通过生态协同,基于昇腾云服务、HarmoyOS、盘古大模型等产品实现技术创新、商业成功的故事,了解根生态各技术趋势及最新前沿科技。本文分享自华为云开发者联盟公众号《华为云携手根生态,助力开发者成长》9月21日,华为全联接大会2024期间,华为云开发者联盟成功......
  • 华为HarmonyOS灵活高效的消息推送服务(Push Kit) - 5 发送通知消息
    场景介绍通知消息通过PushKit通道直接下发,可在终端设备的通知中心、锁屏、横幅等展示,用户点击后拉起应用。您可以通过设置通知消息样式来吸引用户。开通权益PushKit根据消息内容,将通知消息分类为服务与通讯、资讯营销两大类别,开放通知消息自分类权益。两种类型的通知消息......
  • 【HarmonyOS】开启沉浸式(全屏)并获取顶部状态栏和底部导航条高度
    鸿蒙开启沉浸式(全屏)并获取顶部状态栏和底部导航条高度1.获取主窗口constwin=windowStage.getMainWindowSync()2.开启沉浸式win.setWindowLayoutFullScreen(true)3.顶部状态栏高度//获取状态栏区域 letarea=win.getWindowAvoidArea(window.AvoidAreaType.......
  • 技术解读:华为云如何携手昇腾、鸿蒙等根生态,助力开发者技术创新
    本文分享自华为云开发者联盟公众号《华为云携手根生态,助力开发者成长》9月21日,华为全联接大会2024期间,华为云开发者联盟成功举办了“华为云携手根生态,全栈使能开发者技术创新”专题演讲分论坛,吸引了众多行业专家和开发者齐聚上海世博中心,共同探讨技术创新的新趋势。本次专题演讲......
  • OpenHarmony 的启动子系统startup与init组件
    1.rk3568的startup配置配上initcomponent以后,系统就会编译集成这个组件。vendor/hihope/rk3568/config.json{"subsystem":"startup","components":[{"component":"init","fea......
  • 技术解读:华为云如何携手昇腾、鸿蒙等根生态,助力开发者技术创新
    摘要:分享在华为云上通过生态协同,基于昇腾云服务、HarmoyOS、盘古大模型等产品实现技术创新、商业成功的故事,了解根生态各技术趋势及最新前沿科技。本文分享自华为云开发者联盟公众号《华为云携手根生态,助力开发者成长》9月21日,华为全联接大会2024期间,华为云开发者联盟成功举办了“......
  • HarmonyOS开发之横竖屏旋转适配
    场景描述在HarmonyOS移动应用开发中,横竖屏旋转适配成为了一个不可或缺的功能点。特别是在HarmonyOSNEXT平台,开发者面临着更加多样化的设备和更复杂的用户交互需求。以下是我们在项目中遇到的一些关于横竖屏旋转的高频问题及解决方案:如何通过传感器自己感知方向并设置旋转:在不考虑......
  • VR开发日志-如何用VR头盔看到自己开发的VR内容?如何用Pico头盔直连UE开发的内容预览?
    大家好,我是JK,今天和大家分享关于如何用VR头盔看到自己开发的VR内容?本次使用的方法是用Pico头盔直连UE开发的内容预览。大家可以跟着步骤来做,具体操作步骤如下:第一步:到pico官网下载PicoDeveloperCerter,链接:PICO开发者平台(picoxr.com)第二步:安装好PicoDeveloper......
  • 在线预览文档的前端实现方法
    在开发Web应用程序中,我们经常需要实现对各种类型文档的在线预览功能,比如PDF、Word文档、Excel表格等等。除了使用第三方库,我们还可以考虑其他几种实现方法。下面介绍几种常见的方法:1.使用浏览器内置组件现代浏览器通常内置了处理文档类型的渲染引擎,例如Chrome和Firefox都具......
  • OpenHarmony Linux内核的config配置
    鸿蒙系统对Linux内核的使用方式对于传统的Linux内核和驱动开发者来说已经发生了很大的变化,首先就是内核config选项的配置方式。传统上,我们直接进入到linux内核目录进行makemenuconfig就可以了,最终会生成1个.config文件,但是鸿蒙不是这样子的。为了解决传统的一平台或一领域产品......