中国优质的IT技术网站
专业IT技术创作平台
IT职业在线教育平台
如何实现图片或视频类型文件选择器?
微信扫码分享
//1.导入选择器模块和文件管理模块。 import photoAccessHelper from '@ohos.file.photoAccessHelper'; import fs from '@ohos.file.fs'; import { BusinessError } from '@ohos.base'; //2.创建图片-音频类型文件选择选项实例。 const photoSelectOptions = new photoAccessHelper.PhotoSelectOptions(); //3。选择媒体文件类型和选择媒体文件的最大数目。 photoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE; // 过滤选择媒体文件类型为IMAGE photoSelectOptions.maxSelectNumber = 5; // 选择媒体文件的最大数目 @Entry @Component struct Index { build() { Row() { Column() { Text("Hello") .fontSize(50) .fontWeight(FontWeight.Bold) .onClick(() => { //4.创建图库选择器实例,调用PhotoViewPicker.select接口拉起图库界面进行文件选择。文件选择成功后,返回PhotoSelectResult结果集。 let uris: Array<string> = []; const photoViewPicker = new photoAccessHelper.PhotoViewPicker(); photoViewPicker.select(photoSelectOptions).then((photoSelectResult: photoAccessHelper.PhotoSelectResult) => { uris = photoSelectResult.photoUris; console.info('photoViewPicker.select to file succeed and uris are:' + uris); // 5.待界面从图库返回后,再通过类似一个按钮调用其他函数,使用fs.openSync接口,通过uri打开这个文件得到fd。这里需要注意接口权限参数是fs.OpenMode.READ_ONLY。 let file = fs.openSync(uris[0], fs.OpenMode.READ_ONLY); console.info('file fd: ' + file.fd); //6.通过fd使用fs.readSync接口读取这个文件内的数据,读取完成后关闭fd。 let buffer = new ArrayBuffer(4096); let readLen = fs.readSync(file.fd, buffer); console.info('readSync data to file succeed and buffer size is:' + readLen); fs.closeSync(file); }).catch((err: BusinessError) => { console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`); }) }) } .width('100%') } .height('100%') } }