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

news/2024/11/15 8:57:58/文章来源:https://www.cnblogs.com/xakoy/p/18430742

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. 《【鸿蒙官方文档】标准化数据类型》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/803369.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis-配置文件解读

Redis配置文件解读 第一节 网络配置相关 bind绑定连接IP 默认情况bind=127.0.0.1只能接受本机的访问请求,不写的情况下,无限制接受任何ip地址的访问,生产环境肯定要写你应用服务器的地址;服务器是需要远程访问的,所以需要将其注释掉.如果开启了protected-mode,那么在没有设…

Spring-MVC

Spring-MVC 介绍 https://docs.spring.io/spring-framework/reference/web/webmvc.html Spring Web MVC是基于Servlet API构建的原始Web框架,从一开始就包含在Spring Framework中。正式名称“Spring Web MVC”来自其源模块的名称( spring-webmvc ),但它通常被称为“Spring …

【泛微E9】查询部门的部门层级以及所有上级部门

效果图如下:field1:一级部门 field2:二级部门 field3:三级部门 field4:四级部门 field5:五级部门 field6:六级部门 创建视图,view_bmcjpath 视图定义如下: WITH RECURSIVE department_tree (id, DEPARTMENTMARK, supdepid, depth, path) AS ( -- 初始化查询(非递归部…

Windows 10 on ARM, version 22H2 (updated Sep 2024) ARM64 AArch64 中文版、英文版下载

Windows 10 on ARM, version 22H2 (updated Sep 2024) ARM64 AArch64 中文版、英文版下载Windows 10 on ARM, version 22H2 (updated Sep 2024) ARM64 AArch64 中文版、英文版下载 基于 ARM 的 Windows 10 请访问原文链接:https://sysin.org/blog/windows-10-arm/,查看最新版…

macOS 15 Blank OVF - macOS Sequoia 虚拟化解决方案

macOS 15 Blank OVF - macOS Sequoia 虚拟化解决方案macOS 15 Blank OVF - macOS Sequoia 虚拟化解决方案 适用于 VMware ESXi 和 VMware Workstation 的 macOS Sequoia 虚拟化模板 请访问原文链接:https://sysin.org/blog/macos-15-ovf/,查看最新版。原创作品,转载请保留出…

ArgoWorkflow教程(五)---Workflow 的多种触发模式:手动、定时任务与事件触发

上一篇我们分析了argo-workflow 中的 archive,包括 流水线GC、流水线归档、日志归档等功能。本篇主要分析 Workflow 中的几种触发方式,包括手动触发、定时触发、Event 事件触发等。1. 概述 Argo Workflows 的流水线有多种触发方式:手动触发:手动提交一个 Workflow,就会触发…

从零开始学机器学习——了解回归

在本文中,我们探讨了回归分析在统计学和数据分析中的重要性和应用。线性回归和逻辑回归作为两种主要的回归分析方法,分别适用于不同类型的数据建模和预测需求。通过数学建模,它们能够揭示变量之间的关系,并且在实际应用中展现了强大的预测能力。首先给大家介绍一个很好用的…

大模型应用曙光 - 10X压缩技术

关注TechLead,复旦AI博士,分享AI领域全维度知识与研究。拥有10+年AI领域研究经验、复旦机器人智能实验室成员,国家级大学生赛事评审专家,发表多篇SCI核心期刊学术论文,上亿营收AI产品研发负责人。如何在不牺牲性能的情况下将大型语言模型缩小十倍 虽然LLM的巨大规模赋予了…

绝缘手套穿戴智能识别系统

绝缘手套穿戴智能识别系统通过opencv深度学习技术赋能现场摄像头,绝缘手套穿戴智能识别系统对现场电力作业人员在带电设备上作业施工时有没有按厂区要求佩戴绝缘手套进行识别检测,当绝缘手套穿戴智能识别系统检测到现场电力作业人员违规行为即未佩戴绝缘手套时立刻抓拍告警,…

智慧工地安全帽智能识别系统

智慧工地安全帽智能识别系统通过opencv深度学习技术,智慧工地安全帽智能识别系统可自动检测识别作业现场人员有没有戴安全帽,当智慧工地安全帽智能识别系统检测出现场施工作业人员没有按照要求戴安全帽时,立即抓拍存档并同步回传违规数据到后台监控大数据平台,并提醒后台人…

煤矿人员工服着装智能识别监测系统

煤矿人员工服着装智能识别监测系统在摄像头监控画面中自动检测作业人员是否正确着装,煤矿人员工服着装智能识别监测系统若发现有现场作业人员没有按要求正确佩戴安全帽、穿着工服,煤矿人员工服着装智能识别监测系统会立即抓拍存档回传后台大数据监控管理平台,现场同时进行语…

Ai检测人员穿衣规范系统

Ai检测人员穿衣规范系统可以通过yolo深度学习技术对现场画面中人员穿衣自动检测,Ai检测人员穿衣规范系统发现现场作业人员未正确按要求穿衣服如穿戴安全带、手套、安全帽、胶鞋、反光衣,Ai检测人员穿衣规范系统会进行语音播报提醒,并将违规行为截图回传给后台大数据平台进行…