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

鸿蒙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!

相关文章:

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

一、新建文件工具类FileUtil.ets 包含&#xff1a;选择照片方法、获取文件类型方法、去除后缀、获取后缀方法 import { BusinessError, request } from kit.BasicServicesKit; import photoAccessHelper from ohos.file.photoAccessHelper; import bundleManager from ohos.b…...

【QT Qucik】C++交互:接收QML信号

在本节课中&#xff0c;我们将深入探讨如何在C中接收QML发出的信号。我们将分为几个部分&#xff0c;详细说明信号的定义、发送及其在C中的接收。 理解信号和槽机制 Qt的信号与槽机制是一种用于对象之间通信的强大工具。信号是对象在特定事件发生时发送的通知&#xff0c;而槽…...

【C++】关键字+命名空间

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解C的命名空间&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 一. 关键字二. 命名空间2.1 命名空间的定义2.2 命名空间的使用a. 命名空间名称作用域限定…...

网络层——IP

IP地址 结构&#xff1a; 由32位二进制数组成&#xff0c;通常用点分的形式被分为四个部分&#xff0c;每个部分1byte&#xff0c;最大值为255。 从功能的角度看&#xff0c;ip地址由两部分组成&#xff0c;网络号和主机号。网络号标识了ip所在的网段&#xff0c;主机号标识了…...

随笔 漫游互联网

网络编程基础&#xff1a;漫游互联网 温故而知新&#xff0c;可以为师矣。互联网我们可以想象成一个立体的网状结构&#xff0c;由一个一个的小网络组成的网状结构&#xff0c;在一个一个小网络中通过一台一台机器组成&#xff0c;经过几十年的发展终于有了今天这个样子。谈论…...

8.9K Star,开源自托管离线翻译引擎

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;公众号「GitHub 指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值&#xff0c;欢迎关注。 在全球化的今天&#xff0c;跨语言交流已成为日常需求&#xff0c;然…...

MySQL基础之DML

MySQL基础之DML 语法不区分大小写 分类 DD(definition)L 定义DM(manipulation)L 操作DQ(query)L 查询DC(control)L 控制 添加数据 # 指定字段添加数据(一条)insert into 表名(字段1,字段2,...) values(值1,值2,...);# 全部字段添加数据(一条)insert into 表名 values(值1,值…...

男单新老对决:林诗栋VS马龙,巅峰之战

听闻了那场激动人心的新老对决&#xff0c;不禁让人热血沸腾。在这场乒乓球的巅峰之战中&#xff0c;林诗栋与马龙的对决无疑是一场视觉与技术的盛宴。 3:3的决胜局&#xff0c;两位选手的每一次挥拍都充满了策略与智慧&#xff0c;他们的每一次得分都让人心跳加速。 林诗栋&am…...

Java如何判断堆区中的对象可以被回收了?

如何判断堆区中的对象可以被回收了 在Java中&#xff0c;垃圾回收机制会帮助我们自动回收不再被使用的对象&#xff0c;已到达即使释放内存的效果&#xff0c;但是Java又是怎么知道哪些对象不会再被我们继续使用了呢&#xff0c;希望你通过本篇文章&#xff0c;理解引用计数法与…...

.Net 6.0 监听Windows网络状态切换

上次发了一个文章获取windows网络状态&#xff0c;判断是否可以访问互联网。传送门&#xff1a;获取本机网络状态 这次我们监听网络状态切换&#xff0c;具体代码如下&#xff1a; public class WindowsNetworkHelper {private static Action<bool>? _NetworkStatusCh…...

UE4 材质学习笔记01(什么是着色器/PBR基础)

1.什么是shader 着色器是控制屏幕上每个像素颜色的代码&#xff0c;这些代码通常在图形处理器上运行。 现如今游戏引擎使用先进的基于物理的渲染和照明。而且照明模型模型大多数是被锁定的。 因此我们创建着色器可以控制颜色&#xff0c;法线&#xff0c;粗糙度&#xff0c;…...

算法 | 位运算(哈希思想)

位运算 &与两个位都为1时&#xff0c;结果才为1&#xff08;有0为0&#xff09;|或两个位都为0时&#xff0c;结果才为0&#xff08;有1为1&#xff09;^异或两个位相同为0&#xff0c;相异为1~取反0变1&#xff0c;1变0<<左移各二进位全部左移若干位&#xff0c;高…...

前端提升方向

1、脚手架配置&#xff1a;首先你会发现&#xff0c;一旦团队项目里多个项目之间的配置或者规范不同步&#xff0c;那么每个项目的配置都需要手动修改&#xff0c;而这很浪费时间。所以&#xff0c;你可以发起了一个团队的脚手架项目&#xff0c;把项目中的代码规范、Vite 配置…...

深度学习基础—残差网络ResNets

1.残差网络结构 当网络训练的很深很深的时候&#xff0c;效果是否会很好&#xff1f;在这篇论文中&#xff0c;作者给出了答案&#xff1a;Deep Residual Learning for Image Recognitionhttps://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/He_Deep_Residual_…...

鸿蒙ArkUI实战开发-主打自研语言及框架

ArkUI 是 HarmonyOS 的声明式 UI 开发框架&#xff0c;而 ArkUI-X 是基于 ArkUI 框架扩展而来的跨平台开发框架。ArkUI-X 支持 HarmonyOS、OpenHarmony、Android 和 iOS 平台&#xff0c;允许开发者使用一套代码构建支持多平台的应用程序。 一、ArkUI-X 的实战开发步骤 在实战开…...

HDU Sit sit sit (区间DP+组合数)

题目大意&#xff1a;有 n 张椅子&#xff0c;n 个人&#xff0c;所有人都可以按照任意顺序坐在任意一张椅子上&#xff0c;但是同时满足这三种情况的椅子不能坐&#xff1a; 1.椅子上有左右两张相邻的椅子。 2.左右相邻的椅子不是空的。 3.左右相邻的椅子颜色不同。 如果当前学…...

Qt开发技巧(十四)文字的分散对齐,设置动态库路径,进度条控件的文本,文件对话框的卡顿,滑块控件的进度颜色,停靠窗体的排列,拖拽事件的坑

继续讲一些Qt开发中的技巧操作&#xff1a; 1.文字的分散对齐 有时候需要对文本进行分散对齐显示&#xff0c;相当于无论文字多少&#xff0c;尽可能占满整个空间平摊占位宽度&#xff0c;但是在对支持对齐方式的控件比如QLabel调用 setAlignment(Qt::AlignJustify | Qt::Align…...

VirtulBOX Ubuntu22安装dpdk23.11

目录 依赖包安装 Python安装 numa安装 ​编辑Python pip3安装 ​编辑pyelftools安装 meson和ninja安装 ​编辑构建与编译 Meson构建DPDK ​编辑Ninja安装DPDK ​编辑VFIO-PCI驱动安装 大页内存和IOMMU配置 ​编辑VFIO-PCI加载 ​编辑VFIO-PCI驱动绑定 ​编辑dpdk…...

线性代数书中求解齐次线性方程组、非齐次线性方程组方法的特点和缺陷(附实例讲解)

目录 一、克拉默法则 1. 方法概述 2. 例16(1) P45 3. 特点 (1) 只适用于系数矩阵是方阵 (2) 只适用于行列式非零 (3) 只适用于唯一解的情况 (4) 只适用于非齐次线性方程组 二、逆矩阵 1. 方法概述 2. 例16(2) P45 3. 特点 (1) 只适用于系数矩阵必须是方阵且可逆 …...

初识算法 · 双指针(2)

目录 前言&#xff1a; 盛最多水的容器 题目解析&#xff1a; 算法原理&#xff1a; 算法编写&#xff1a; 有效三角形的个数 题目解析&#xff1a; 算法原理&#xff1a; 算法编写&#xff1a; 前言&#xff1a; 本文介绍两个题目&#xff0c;盛最多水的容器和有效三…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...