鸿蒙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('未选择文件!')
}
})