鴻蒙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://www.pswp.cn/diannao/79387.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79387.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79387.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL常用SQL語句的示例

概述 MySQL 常用 SQL 語句的示例&#xff0c;涵蓋數據定義、操作、查詢等常見場景 一、數據庫操作 創建數據庫 CREATE DATABASE mydb;選擇數據庫 USE mydb;刪除數據庫 DROP DATABASE mydb;二、表操作 創建表 CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VAR…

智算啟新篇 安全筑新基 ——中國移動舉辦智算基礎設施及安全分論壇

4月10日&#xff0c;2025中國移動云智算大會智算基礎設施及安全分論壇在蘇州金雞湖國際會議中心揭幕。 在數字經濟浪潮奔涌向前的時代坐標下&#xff0c;中國移動錨定“創世界一流信息服務科技創新公司”定位&#xff0c;持續推進智算基礎設施建設&#xff0c;持續提升網信安全…

MySQL——游標(cursor)

一、什么是游標&#xff1f; 游標&#xff08;Cursor&#xff09; 是MySQL中用于逐行處理查詢結果集的數據庫對象。它類似于指針&#xff0c;允許開發者在結果集中逐行移動&#xff0c;并對每一行數據進行特定操作。游標將傳統的集合操作轉換為面向過程的記錄處理方式&#xf…

異步編程——微信小程序

1. 前言 引用來自&#xff1a;微信小程序開發中的多線程處理與異步編程_微信小程序 多線程-CSDN博客 微信小程序是基于JavaScript開發的&#xff0c;與瀏覽器JavaScript不同&#xff0c;小程序運行在WebView內部&#xff0c;沒有多線程的概念。小程序的 JavaScript 是單線程的…

HarmonyOS-ArkUI V2狀態-PersistenceV2:持久化存儲UI狀態

PersistenceV2類是一個與AppStorageV2類用法非常相似的類。因為它倆是子類和父類的關系。如果不了解AppStorageV2,可以先跳轉至了解一下這個類。 HarmonyOS-ArkUI V2工具類:AppStorageV2:應用全局UI狀態存儲-CSDN博客 PersistenceV2相比于其父類AppStorageV2而言,它存儲的…

《Mycat核心技術》第22章:搭建Mycat+Zookeeper+HAProxy+Keepalived+MySQL高可用架構

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章匯總&#xff1a;https://binghe.gitcode.host/md/all/all.html 星球項目地址&#xff1a;https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…

Aosp13 文件應用點擊apk無反應的處理

最近遇到一個問題&#xff0c;在A13上&#xff0c;打開文件管理應用時&#xff0c;點擊apk 無反應或者啟動安裝進程后安裝完成或取消安裝進程&#xff0c;再次點擊apk 無反應。在此記錄該問題。 做一下修改&#xff1a;root/package/ providers/DownloadProvider/下 jenkinsdel…

SQL刷題記錄貼

1.題目&#xff1a;現在運營想要對用戶的年齡分布開展分析&#xff0c;在分析時想要剔除沒有獲取到年齡的用戶&#xff0c;請你取出所有年齡值不為空的用戶的設備ID&#xff0c;性別&#xff0c;年齡&#xff0c;學校的信息。 錯誤&#xff1a;select device_id,gender,age,un…

【Windows本地部署n8n工作流自動平臺結合內網穿透遠程在線訪問】

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

python爬蟲降低IP封禁,python爬蟲除了使用代理IP和降低請求頻率,還有哪些方法可以應對IP封禁?

文章目錄 前言1. 利用 CDN 節點2. 模擬真實用戶行為3. 使用 IP 池輪換策略4. 處理 Cookie 和會話信息5. 分布式爬蟲 前言 除了使用代理 IP 和降低請求頻率&#xff0c;以下這些方法也能應對 IP 封禁&#xff1a; Python 3.13.2安裝教程&#xff08;附安裝包&#xff09;Python…

光譜相機的成像方式

光譜相機的成像方式決定了其如何獲取物體的空間與光譜信息&#xff0c;核心在于分光技術與掃描模式的結合。以下是主要成像方式的分類解析&#xff1a; ?一、濾光片切換型? ?1. 濾光片輪&#xff08;Filter Wheel&#xff09;? ?原理?&#xff1a;通過旋轉裝有多個窄帶…

AI在市場營銷分析中的核心應用及價值,分場景詳細說明

以下是 AI在市場營銷分析中的核心應用及價值&#xff0c;分場景詳細說明&#xff1a; 1. 客戶行為分析與細分 AI技術應用&#xff1a; 機器學習&#xff1a;分析用戶點擊、購買、瀏覽等行為數據&#xff0c;識別消費模式&#xff08;如高頻購買時段、偏好品類&#xff09;。聚…

潯川AI翻譯v7.0更新預告

親愛的潯川AI翻譯用戶&#xff1a; 感謝您一直以來的支持&#xff01;潯川AI翻譯自推出以來&#xff0c;已迭代6個版本&#xff0c;其中**v2.0和v4.0因技術問題&#xff08;翻譯結果顯示異常、注冊失敗、密碼找回功能失效等&#xff09;**被迫下架。我們深知這些問題影響了您…

LabVIEW中二維數組轉換為彩色圖

在 LabVIEW 編程環境下&#xff0c;有用戶想把二維數組轉化為彩色圖片。通過附件的程序示例&#xff0c;給出了具體實現方法&#xff0c;包括對數據的處理以及顏色映射的設置等內容&#xff0c;還涉及解決數據范圍與顏色映射不匹配等問題。公司官網有源碼 程序功能及細節 功能&…

【模型常見評價指標(分類)】

目錄 常見指標 其他的評估指標 3.1 BLEU 3.2 ROUGE 3.3 困惑度PPL(perplexity) 常見指標 其他的評估指標 3.1 BLEU BLEU&#xff08;Bilingual Evaluation Understudy&#xff0c;雙語評估替補&#xff09;分數是評估一種語言翻譯成另一種語言的文本質量的指標。它將“質…

期貨數據API對接實戰指南

一、期貨數據接口概述 StockTV提供全球主要期貨市場的實時行情與歷史數據接口&#xff0c;覆蓋以下品種&#xff1a; 商品期貨&#xff1a;原油、黃金、白銀、銅、天然氣、農產品等金融期貨&#xff1a;股指期貨、國債期貨特色品種&#xff1a;馬棕油、鐵礦石等區域特色期貨 …

TCP連接建立:為什么是三次握手?

接下來&#xff0c;以三個方面分析三次握手的原因&#xff1a; 1、三次握手才可以阻止重復歷史連接的初始化&#xff08;主要原因&#xff09; 2、三次握手才可以同步雙方的初始化序列號 3、三次握手才可以避免資源浪費 原因一&#xff1a;避免歷史連接 簡單來說&#xff0…

Table類型的表單

形如下面的圖片 1 label與prop屬性 const columns[{label: "文件名",prop: "fileName",scopedSlots: "fileName",},{ label: "刪除時間",prop: "recoveryTime",width: "200",},{ label: "大小",prop:…

Cesium 加載 本地 b3dm 格式文件 并且 獲取鼠標點擊處經緯度 (親測可用)

很奇怪cesium 里面只支持 相對路徑 不支持絕對路徑 我把 模型放在 /***/Cesium-1.128/Apps/SampleData/Cesium3DTiles/Tilesets 下面 "../../SampleData/Cesium3DTiles/Tilesets/terra_b3dms/tileset.json",所有源碼 const viewer new Cesium.Viewer("cesiu…

Spring AI核心之“ChatClient”-來自DeepSeek

在 Spring AI 生態中&#xff0c;ChatClient 是一個面向開發者設計的高層抽象接口&#xff0c;它簡化了與大型語言模型&#xff08;LLMs&#xff09;的交互流程&#xff0c;尤其適用于需要快速構建端到端 AI 應用&#xff08;如聊天機器人、RAG 問答系統等&#xff09;的場景。…