当前位置: 首页 > news >正文

鸿蒙NEXT开发文件预览工具类(ArkTs)

import { uniformTypeDescriptor } from '@kit.ArkData';
import { filePreview } from '@kit.PreviewKit';
import { FileUtil } from './FileUtil';
import { AppUtil } from './AppUtil';
import { WantUtil } from './WantUtil';/*** 文件预览工具类* 提供文件预览、加载、判断等功能。* author: CSDN-鸿蒙布道师* since: 2025/04/16*/
export class PreviewUtil {/*** 通过传入文件预览信息,打开预览窗口。1秒内重复调用无效。* @param previewInfo 文件的预览信息* @returns Promise<void>*/static openPreview(previewInfo: filePreview.PreviewInfo): Promise<void> {if (!previewInfo) {throw new Error("PreviewInfo cannot be empty.");}return filePreview.openPreview(AppUtil.getContext(), previewInfo);}/*** 通过传入文件的 URI,打开预览窗口。1秒内重复调用无效。* @param uri 文件的 URI* @returns Promise<void>*/static async openPreviewEasy(uri: string): Promise<void> {if (!uri) {throw new Error("URI cannot be empty.");}const previewInfo = PreviewUtil.generatePreviewInfo(uri);return filePreview.openPreview(AppUtil.getContext(), previewInfo);}/*** 根据文件的 URI 判断文件是否可预览。* @param uri 文件的 URI* @returns Promise<boolean>*/static canPreview(uri: string): Promise<boolean> {if (!uri) {throw new Error("URI cannot be empty.");}return filePreview.canPreview(AppUtil.getContext(), uri);}/*** 判断预览窗口是否已经存在。* @returns Promise<boolean>*/static hasDisplayed(): Promise<boolean> {return filePreview.hasDisplayed(AppUtil.getContext());}/*** 关闭预览窗口,仅当预览窗口存在时起效。*/static closePreview(): void {filePreview.closePreview(AppUtil.getContext());}/*** 加载预览文件信息。仅当预览窗口存在时起效。* @param previewInfo 文件的预览信息* @returns Promise<void>*/static loadData(previewInfo: filePreview.PreviewInfo): Promise<void> {if (!previewInfo) {throw new Error("PreviewInfo cannot be empty.");}return filePreview.loadData(AppUtil.getContext(), previewInfo);}/*** 加载预览文件信息。仅当预览窗口存在时起效。* @param uri 文件的 URI* @returns Promise<void>*/static async loadDataEasy(uri: string): Promise<void> {if (!uri) {throw new Error("URI cannot be empty.");}const previewInfo = PreviewUtil.generatePreviewInfo(uri);return filePreview.loadData(AppUtil.getContext(), previewInfo);}/*** 调用其他应用预览文件。* @param uri 文件的 URI* @param write 是否有写入权限,默认为 true* @returns Promise<void>*/static onSharePreview(uri: string, write: boolean = true): Promise<void> {if (!uri) {throw new Error("URI cannot be empty.");}return WantUtil.openFile(uri, write);}/*** 根据文件 URI 构建 PreviewInfo。* @param uri 文件的 URI* @returns filePreview.PreviewInfo*/static generatePreviewInfo(uri: string): filePreview.PreviewInfo {if (!uri) {throw new Error("URI cannot be empty.");}const fileName = FileUtil.getFileName(uri);const fileExtention = FileUtil.getFileExtention(fileName);const mimeType = PreviewUtil.getMimeType(fileExtention);return {title: fileName,uri: uri,mimeType: mimeType,};}/*** 根据文件后缀名获取 TypeDescriptor(标准化数据类型的描述类)。* @param fileExtention 文件后缀名,例如:html txt doc ts mp3* @returns uniformTypeDescriptor.TypeDescriptor*/static getTypeDescriptor(fileExtention: string): uniformTypeDescriptor.TypeDescriptor {if (!fileExtention) {throw new Error("File extension cannot be empty.");}const dataType = uniformTypeDescriptor.getUniformDataTypeByFilenameExtension(`.${fileExtention}`);return uniformTypeDescriptor.getTypeDescriptor(dataType);}/*** 根据文件后缀名获取文件 MIME 类型。* @param fileExtention 文件后缀名,例如:html txt doc ts mp3* @returns string*/static getMimeType(fileExtention: string): string {if (!fileExtention) {throw new Error("File extension cannot be empty.");}const typeDescriptor = PreviewUtil.getTypeDescriptor(fileExtention);return typeDescriptor.mimeTypes && typeDescriptor.mimeTypes.length > 0 ? typeDescriptor.mimeTypes[0] : '*/*';}/*** 根据文件后缀名获取对应文件类型的图标。* @param fileExtention 文件后缀名,例如:html txt doc ts mp3* @returns string*/static getIconFileStr(fileExtention: string): string {if (!fileExtention) {throw new Error("File extension cannot be empty.");}const descriptor = PreviewUtil.getTypeDescriptor(fileExtention);return descriptor.iconFile;}/*** 判断当前设备是否支持文件预览能力。* @returns boolean*/static canIUsePreview(): boolean {return canIUse("SystemCapability.Filemanagement.FilePreview.Core");}
}
代码如下:
import { uniformTypeDescriptor } from '@kit.ArkData';
import { filePreview } from '@kit.PreviewKit';
import { FileUtil } from './FileUtil';
import { AppUtil } from './AppUtil';
import { WantUtil } from './WantUtil';/*** 文件预览工具类* 提供文件预览、加载、判断等功能。* author: CSDN-鸿蒙布道师* since: 2025/04/16*/
export class PreviewUtil {/*** 通过传入文件预览信息,打开预览窗口。1秒内重复调用无效。* @param previewInfo 文件的预览信息* @returns Promise<void>*/static openPreview(previewInfo: filePreview.PreviewInfo): Promise<void> {if (!previewInfo) {throw new Error("PreviewInfo cannot be empty.");}return filePreview.openPreview(AppUtil.getContext(), previewInfo);}/*** 通过传入文件的 URI,打开预览窗口。1秒内重复调用无效。* @param uri 文件的 URI* @returns Promise<void>*/static async openPreviewEasy(uri: string): Promise<void> {if (!uri) {throw new Error("URI cannot be empty.");}const previewInfo = PreviewUtil.generatePreviewInfo(uri);return filePreview.openPreview(AppUtil.getContext(), previewInfo);}/*** 根据文件的 URI 判断文件是否可预览。* @param uri 文件的 URI* @returns Promise<boolean>*/static canPreview(uri: string): Promise<boolean> {if (!uri) {throw new Error("URI cannot be empty.");}return filePreview.canPreview(AppUtil.getContext(), uri);}/*** 判断预览窗口是否已经存在。* @returns Promise<boolean>*/static hasDisplayed(): Promise<boolean> {return filePreview.hasDisplayed(AppUtil.getContext());}/*** 关闭预览窗口,仅当预览窗口存在时起效。*/static closePreview(): void {filePreview.closePreview(AppUtil.getContext());}/*** 加载预览文件信息。仅当预览窗口存在时起效。* @param previewInfo 文件的预览信息* @returns Promise<void>*/static loadData(previewInfo: filePreview.PreviewInfo): Promise<void> {if (!previewInfo) {throw new Error("PreviewInfo cannot be empty.");}return filePreview.loadData(AppUtil.getContext(), previewInfo);}/*** 加载预览文件信息。仅当预览窗口存在时起效。* @param uri 文件的 URI* @returns Promise<void>*/static async loadDataEasy(uri: string): Promise<void> {if (!uri) {throw new Error("URI cannot be empty.");}const previewInfo = PreviewUtil.generatePreviewInfo(uri);return filePreview.loadData(AppUtil.getContext(), previewInfo);}/*** 调用其他应用预览文件。* @param uri 文件的 URI* @param write 是否有写入权限,默认为 true* @returns Promise<void>*/static onSharePreview(uri: string, write: boolean = true): Promise<void> {if (!uri) {throw new Error("URI cannot be empty.");}return WantUtil.openFile(uri, write);}/*** 根据文件 URI 构建 PreviewInfo。* @param uri 文件的 URI* @returns filePreview.PreviewInfo*/static generatePreviewInfo(uri: string): filePreview.PreviewInfo {if (!uri) {throw new Error("URI cannot be empty.");}const fileName = FileUtil.getFileName(uri);const fileExtention = FileUtil.getFileExtention(fileName);const mimeType = PreviewUtil.getMimeType(fileExtention);return {title: fileName,uri: uri,mimeType: mimeType,};}/*** 根据文件后缀名获取 TypeDescriptor(标准化数据类型的描述类)。* @param fileExtention 文件后缀名,例如:html txt doc ts mp3* @returns uniformTypeDescriptor.TypeDescriptor*/static getTypeDescriptor(fileExtention: string): uniformTypeDescriptor.TypeDescriptor {if (!fileExtention) {throw new Error("File extension cannot be empty.");}const dataType = uniformTypeDescriptor.getUniformDataTypeByFilenameExtension(`.${fileExtention}`);return uniformTypeDescriptor.getTypeDescriptor(dataType);}/*** 根据文件后缀名获取文件 MIME 类型。* @param fileExtention 文件后缀名,例如:html txt doc ts mp3* @returns string*/static getMimeType(fileExtention: string): string {if (!fileExtention) {throw new Error("File extension cannot be empty.");}const typeDescriptor = PreviewUtil.getTypeDescriptor(fileExtention);return typeDescriptor.mimeTypes && typeDescriptor.mimeTypes.length > 0 ? typeDescriptor.mimeTypes[0] : '*/*';}/*** 根据文件后缀名获取对应文件类型的图标。* @param fileExtention 文件后缀名,例如:html txt doc ts mp3* @returns string*/static getIconFileStr(fileExtention: string): string {if (!fileExtention) {throw new Error("File extension cannot be empty.");}const descriptor = PreviewUtil.getTypeDescriptor(fileExtention);return descriptor.iconFile;}/*** 判断当前设备是否支持文件预览能力。* @returns boolean*/static canIUsePreview(): boolean {return canIUse("SystemCapability.Filemanagement.FilePreview.Core");}
}


文章转载自:

http://rHYl6NPj.jqpyq.cn
http://yOkXL8oD.jqpyq.cn
http://ZMKEYQJt.jqpyq.cn
http://RbDAZLqt.jqpyq.cn
http://h669DK5i.jqpyq.cn
http://911VNjJO.jqpyq.cn
http://bTH7KtPH.jqpyq.cn
http://NBOMPak7.jqpyq.cn
http://Kpgi1KiP.jqpyq.cn
http://kFzdrdDB.jqpyq.cn
http://cvXgMTnC.jqpyq.cn
http://qqCdDkbr.jqpyq.cn
http://MMP3NfkR.jqpyq.cn
http://18wjlDj1.jqpyq.cn
http://9lTXnZ7L.jqpyq.cn
http://DAyBTZXI.jqpyq.cn
http://vlsRODLc.jqpyq.cn
http://21ocIAFk.jqpyq.cn
http://6ge99gy9.jqpyq.cn
http://G8ptOVXu.jqpyq.cn
http://AR3gzRlW.jqpyq.cn
http://FbJ0u18l.jqpyq.cn
http://tZqnojcz.jqpyq.cn
http://dZ71wv0J.jqpyq.cn
http://9uBjqBAg.jqpyq.cn
http://8VXCwxG8.jqpyq.cn
http://YZk8kLbc.jqpyq.cn
http://ZzIcV2eL.jqpyq.cn
http://RzCuy47w.jqpyq.cn
http://ha7WOjSg.jqpyq.cn
http://www.dtcms.com/a/136723.html

相关文章:

  • IT运维常用的软件工具有哪些
  • iOS内存管理中的强引用问题
  • BGP(边界网关协议)
  • STM32单片机入门学习——第39节: [11-4] SPI通信外设
  • G代码中表达式赋值与变量的使用
  • ADI的BF609双核DSP怎么做开发,我来说一说(二)DDR驱动测试
  • 记录一个坑关于STM32 ARM Compiler Version
  • HarmonyOS学习 实验九:@State和@Prop装饰器的使用方法
  • (三)谷歌Code as Policies复现(操作记录)
  • [学习] C语言数据结构深度解析:八种树结构与应用场景详解(代码示例)
  • 【MySQL学习】存储过程
  • 学习笔记十四——一文看懂 Rust 迭代器
  • SIMULIA-Abaqus有限元分析软件针对汽车行业的解决方案
  • 通信算法之266: 无人机信号带宽计算
  • 软件需求说明书模板
  • 遨游防爆手机:构筑煤矿安全通讯的数字护盾
  • 【Java学习笔记】运算符
  • 【星海随笔】Python-JSON数据的处理
  • C++中类拷贝、赋值与销毁详解
  • FairyGUI图标文字合批失败的原因
  • HarmonyOS 5.0应用开发——五子棋游戏(鸿蒙版)开发
  • 【双指针】专题:LeetCode 611题解——有效三角形的个数
  • OpenCV 图形API(39)图像滤波----同时计算图像在 X 和 Y 方向上的一阶导数函数SobelXY()
  • 企业采购平台搭建指南:从流程重构到生态协同的数字化转型路径
  • 【学习笔记】Taming 3DGS泛读
  • 【android bluetooth 协议分析 02】【bluetooth hal 层详解 1】【uart 介绍】
  • 【病毒分析】定向财务的钓鱼木马分析
  • 过滤器及拦截器
  • 一文掌握RK3568开发板Android13挂载Windows共享目录
  • C++Cherno 学习笔记day21 [86]-[90] 持续集成、静态分析、参数计算顺序、移动语义、stdmove与移动赋值操作符