当前位置: 首页 > 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");}
}

相关文章:

  • 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图标文字合批失败的原因
  • 一个平台怎么推广/seo内容优化方法
  • 政府门户网站建设的目的和意义/网页制作用什么软件做
  • java 网站建设/汕头网站建设
  • 体育新闻/seo范畴有哪些
  • 一个云主机可以做多少网站/企业营销模式
  • 做赛事下注网站违法吗/sem是什么的缩写