鸿蒙HarmonyOS之选择相册文件(照片/视频)方法

一、新建文件工具类FileUtil.ets

包含:选择照片方法、获取文件类型方法、去除后缀、获取后缀方法

import { BusinessError, request } from '@kit.BasicServicesKit';
import photoAccessHelper from '@ohos.file.photoAccessHelper';
import bundleManager from '@ohos.bundle.bundleManager';/*** 选择图库图片* @param selectMax 选择文件数量限制* @param selectType 选择文件类型限制* @returns*/
export async function fileSelect(selectMax: number,selectType: photoAccessHelper.PhotoViewMIMETypes): Promise<Array<string>> {try {// //选择图片的类型// let recommendOptions: photoAccessHelper.RecommendationOptions = {//   recommendationType: photoAccessHelper.RecommendationType.ID_CARD// }let options: photoAccessHelper.PhotoSelectOptions = {MIMEType: selectType,maxSelectNumber: selectMax,// recommendationOptions: recommendOptions}let photoPicker = new photoAccessHelper.PhotoViewPicker();// 使用 await 确保异步操作完成const PhotoSelectResult = await photoPicker.select(options);// 成功获取结果后返回字符串形式的结果console.info('PhotoViewPicker.select successfully, result is: ' + JSON.stringify(PhotoSelectResult));if (PhotoSelectResult && PhotoSelectResult.photoUris && PhotoSelectResult.photoUris.length > 0) {return PhotoSelectResult.photoUris;}else{return [];}} catch (error) {// 处理捕获到的错误,并返回空let err: BusinessError = error as BusinessError;console.error(`PhotoViewPicker failed with err: ${err.code}, ${err.message}`);return []; // 返回空}
}/*** 获取文件类型* @param uri* @returns*/
export function getFileTypeFromExtension(uri: string): 'image' | 'video' | 'unknown' {const fileName = uri.substring(uri.lastIndexOf('/') + 1);const fileExtension = fileName.split('.').pop()?.toLowerCase();if (fileExtension) {switch (fileExtension) {case 'jpg':case 'jpeg':case 'png':case 'bmp':case 'gif':return 'image';case 'mp4':case 'avi':case 'mov':case 'mkv':return 'video';default:return 'unknown';}}return 'unknown';
}/*** 去除后缀的文件名* @param uri* @returns*/
export function removeFileExtension(uri: string): string {const fileName = uri.substring(uri.lastIndexOf('/') + 1);const baseName = fileName.split('.').slice(0, -1).join('.');return uri.replace(fileName, baseName);
}/*** 获取后缀* @param uri* @returns*/
export function getFileExtensionWithDot(uri: string): string {const lastDotIndex = uri.lastIndexOf('.');if (lastDotIndex > -1) {return uri.substring(lastDotIndex);}return ''; // 如果没有找到后缀名,则返回空字符串
}

二、使用示例

1、选择一张图片文件

fileSelect(1, photoAccessHelper.PhotoViewMIMETypes.IMAGE_VIDEO_TYPE).then((uriArray: Array<string>) => {if (uriArray && uriArray.length > 0) {this.imageUri = uriArray[0];Logger.debug(this.TAG,'选择的图片Uri是:'+ this.imageUri)}else{Logger.debug(this.TAG,'未选择图片!')showToast('未选择图片!')}});

2、选择多个文件,不限图片或视频

fileSelect(20, photoAccessHelper.PhotoViewMIMETypes.IMAGE_VIDEO_TYPE).then((uriArray: Array<string>) => {if (uriArray && uriArray.length > 0) {Logger.debug(this.TAG, '准备上传')for (let index = 0; index < uriArray.length; index++) {const itemUri = uriArray[index];let type: string = getFileTypeFromExtension(itemUri);let suffix: string = getFileExtensionWithDot(itemUri);Logger.debug(this.TAG, '选择照片的uri = ' + itemUri)Logger.debug(this.TAG, '文件类型是:' + type + ', 文件后缀是:' + suffix);//......}} else {Logger.debug(this.TAG, '未选择文件!')showToast('未选择文件!')}})

三、完成,Nice!

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

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

相关文章

Python中对象obj类型确定最pythonic的方式——isinstance()函数

python中确定对象obj的类型&#xff0c;isinstance函数最是优雅&#xff0c;type、issubclass等函数也可以&#xff0c;但终究“曲折”。 (笔记模板由python脚本于2024年10月07日 19:42:38创建&#xff0c;本篇笔记适合喜欢python的coder翻阅) 【学习的细节是欢悦的历程】 Pyth…

算法专题四: 前缀和

目录 1. 前缀和2. 二维前缀和3. 寻找数组的中心下标4. 除自身以外数组的乘积5. 和为k的子数组6. 和可被K整除的子数组7. 连续数组8. 矩阵区域和 博客主页:酷酷学!!! 感谢关注~ 1. 前缀和 算法思路: 根据题意, 创建一个前缀和数组, dp[i] dp[i -1] arr[i], 再使用前缀和数组,…

排查和解决JVM OOM实战

JVM OOM介绍 Java内存区域布局 下面的分析中都是基于JDK 8开始的。关于JMM不过多介绍每个区域的作用。OOM不单只会发生在堆内存&#xff0c;也可能是因为元空间或直接内存泄漏导致OOM&#xff0c;此时在OOM的详细信息中会有不同体现。 Java OOM的类别 java.lang.OutOfMemory…

王者农药更新版

一、启动文件配置 二、GPIO使用 2.1基本步骤 1.配置GPIO&#xff0c;所以RCC开启APB2时钟 2.GPIO初始化&#xff08;结构体&#xff09; 3.给GPIO引脚设置高/低电平&#xff08;WriteBit&#xff09; 2.2Led循环点亮&#xff08;GPIO输出&#xff09; 1.RCC开启APB2时钟。…

HarmonyOS/OpenHarmony 自定义弹窗页面级层级控制解决方案

关键词&#xff1a;CuntomDialog自定义弹窗、SubWindow子窗口、页面级、弹窗层级控制、鸿蒙、弹窗展示层级异常 问题存在API版本&#xff1a;API10 - API12&#xff08;该问题已反馈&#xff0c;期望后续官方能增加页面级控制能力&#xff09; 在正常的鸿蒙app开发过程中&…

零散的知识

1.物化 在SQL中&#xff0c;物化&#xff08;Materialization&#xff09;是指将查询结果保存为物理数据结构以供后续使用的过程。这与普通的视图或查询不同&#xff0c;物化视图会存储查询的结果&#xff0c;而不是每次查询时都动态地重新计算数据。 ①物化视图 物化视图是一…

STM32 HAL 内部FLASH傻瓜式教程 各种型号单片机都适用主要解决网上例程HAL库无法写入问题

1、简介 本文主要针对网上例程FLASH无法写入问题,傻瓜式操作。 2、BSP_Flash.c #include "BSP_Flash.h" uint32_t FlashData; uint32_t Flashaddr = 0x08020000; static uint8_t stmflash_get_error_status(void) {uint32_t res;res = FLASH->SR;if (res &…

TIM(Timer)定时器的原理

一、介绍 硬件定时器的工作原理基于时钟信号源提供稳定的时钟信号作为计时器的基准。计数器从预设值开始计数&#xff0c;每当时钟信号到达时计数器递增。当计数器达到预设值时&#xff0c;定时器会触发一个中断信号通知中断控制器处理相应的中断服务程序。在中断服务程序中&a…

LeetCode讲解篇之239. 滑动窗口最大值

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们维护一个长度为k的窗口&#xff0c;然后窗口从数组最左边一直移动到最右边&#xff0c;记录过程中窗口中的最大值&#xff0c;就是答案 我们每次查询长度为k的窗口最大值是什么时间复杂度是O(k)的&#xff0…

千益畅行,旅游创业新模式的创新与发展

旅游创业的时代背景与旅游卡的崛起&#xff0c;在当今快节奏的时代&#xff0c;旅行成为人们生活中的重要部分&#xff0c;随着科技发展和市场需求的变化&#xff0c;旅游创业项目中的旅游卡应运而生。 其中&#xff0c;“千益畅行” 旅游卡作为新兴力量&#xff0c;在共享经济…

XHTML 简介

XHTML 简介 XHTML,即“可扩展超文本标记语言”(eXtensible HyperText Markup Language),是一种基于XML的标记语言,旨在取代HTML作为网页内容的标准格式。XHTML由万维网联盟(W3C)开发,旨在实现HTML向XML的过渡,提供更严格、更清晰的语法规则。本文将详细介绍XHTML的历…

rust中async/await的使用

在Rust中,async/await 用于编写异步代码。它允许您以同步的方式编写异步代码,使得异步操作更易于理解和编写。 安装依赖: cargo add futures cargo add async-std 使用示例: 示例1: use async_std::task::block_on;fn main() {block_on(hello()); }async fn hello() …

`git fetch` 检查更新

git fetch 是 Git 中的一个命令&#xff0c;主要用于从远程仓库获取最新的更新&#xff0c;但不会自动将这些更新合并到你的本地分支。它的主要作用是让你可以查看远程仓库的最新变化&#xff0c;而不改变你当前正在工作的代码。 1. 获取远程更新 git fetch 会从远程仓库下载…

【移动端】Viewport 视口

1. 什么是 Viewport&#xff08;视口&#xff09;&#xff1f; Viewport&#xff08;视口&#xff09;是指浏览器中用户可见的那部分网页内容的区域&#xff0c;简单来说&#xff0c;它是用户当前看到的网页的“窗口”区域。在不同的设备上&#xff0c;Viewport 的大小会有所不…

【SVN】一文读懂Subversion(SVN)

SVN 一、SVN简介1. 概念1.1 repository&#xff08;源代码库&#xff09;1.2 Checkout&#xff08;提取&#xff09;1.3 Commit&#xff08;提交&#xff09;1.4 Update (更新) 2. SVN的主要功能2.1 目录版本控制2.2 真实的版本历史2.3 自动提交2.4 纳入版本控管的元数据2.5 选…

MoveIt2-humble----Planning Around Objects

1 添加Planning Scene Interface头文件 #include <moveit/planning_scene_interface/planning_scene_interface.h>2 改变目标位姿 // Set a target Pose auto const target_pose [] {geometry_msgs::msg::Pose msg;msg.orientation.w 1.0;msg.position.x 0.28;msg.p…

Github 2024-10-06 php开源项目日报 Top10

根据Github Trendings的统计,今日(2024-10-06统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目10Blade项目2Laravel:表达力和优雅的 Web 应用程序框架 创建周期:4631 天开发语言:PHP, BladeStar数量:75969 个Fork数量:24281 次…

Linux安装部署MySQL8.0加遇着问题解决

1.首先我先给个URL下载MySQL官方网站https://downloads.mysql.com/archives/community/ 2.选择Linux的红帽系统 3.接着选择红帽系统的7版本,x86 4.接着选择MySQL版本,此时我选择8.4.0,下载rpm bundle这个,下载下面这个就好 5.Windows文件上传到Linux系统 rz上传文件命令,找到…

【unity游戏开发】彻底理解AnimatorStateInfo,获取真实动画长度

前言 前置知识&#xff1a;设置参数后&#xff0c;下一个循环才会切换对应动画&#xff0c;所以在下一个循环获取真实的动画长度 AnimatorStateInfo是结构体&#xff01;值类型&#xff0c;要不断重复获取才是最新的 主要是自动设置trigger切换的动画自动切回上一个动画&#x…

Java中如何实现定时任务?

目录 一、定时任务 概念 作用 二、简单定时任务实现方式 1. Thread线程等待&#xff08;最原始最简单方式&#xff09; 2. 使用java.util.Timer Timer 优缺点分析 3. 使用JDK自带的ScheduledExecutorService schedule和scheduleAtFixedRate的区别 schedule侧重保持间隔…