欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 鸿蒙 ——选择相册图片保存到应用

鸿蒙 ——选择相册图片保存到应用

2025/4/5 20:45:36 来源:https://blog.csdn.net/weixin_45126622/article/details/147002870  浏览:    关键词:鸿蒙 ——选择相册图片保存到应用

photoAccessHelper

// entry/src/main/ets/utils/file.ets
import { fileIo } from '@kit.CoreFileKit';
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { bundleManager } from '@kit.AbilityKit';// 应用在本设备内部存储上通用的存放默认长期保存的文件路径;随应用卸载而清理。
// 可以用于保存应用的任何私有数据,主要包括用户持久性文件、图片、媒体文件以及日志文件等。此路径下存储这些数据,使得数据保持私有、安全且持久有效。
// 应用通用文件路径 + path
export function getSandboxFiles(path: string) {return `${getContext().filesDir}/${path}`;
}// 应用在本设备内部存储上用于缓存下载的文件或可重新生成的缓存文件的路径,应用cache目录大小超过配额或者系统空间达到一定条件,自动触发清理该目录下文件;随应用卸载而清理。
// 可以用于保存应用的缓存数据,主要包括离线数据、图片缓存、数据库备份以及临时文件等。此路径下存储的数据可能会被系统自动清理,因此不要存储重要数据。
// 应用缓存文件路径 + path
export function getSandboxCache(path: string) {return `${getContext().cacheDir}/${path}`;
}// 创建文件夹
export function addFileFolder(path: string) {fileIo.access(path, (err, res: boolean) => { // 检查文件是否存在if (!res) {fileIo.mkdirSync(path); // 以同步方法创建目录。}})
}// 复制文件
export function copyFileSync(srcPath: string, destPath: string) {const srcFile = fileIo.openSync(srcPath, fileIo.OpenMode.READ_ONLY); // 以同步方法打开文件。const destFile = fileIo.openSync(destPath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);fileIo.copyFileSync(srcFile.fd, destFile.fd); // 以同步方法复制文件。fileIo.closeSync(srcFile);fileIo.closeSync(destFile); // 以同步方法关闭文件。
}// 图片选择
export async function selectImages(maxNumber: number = 1, where: string = 'files'): Promise<string[]> {if (where === 'files') {addFileFolder(getSandboxFiles('images')) // 创建images目录}const photoSelectOptions = new photoAccessHelper.PhotoSelectOptions();photoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE; // 过滤选择媒体文件类型为IMAGE。photoSelectOptions.maxSelectNumber = maxNumber; // 选择媒体文件的最大数目。const photoViewPicker = new photoAccessHelper.PhotoViewPicker();return photoViewPicker.select(photoSelectOptions).then((photoSelectResult: photoAccessHelper.PhotoSelectResult) => {return photoSelectResult.photoUris.map(filePath => {const imageName = filePath.split('/').pop() || '';let sandboxPath = ''if (where === 'cache') {sandboxPath = getSandboxCache(imageName); // 当前上传应用文件功能,仅支持上传应用缓存文件路径(cacheDir)下的文件。copyFileSync(filePath, sandboxPath);return sandboxPath;} else {sandboxPath = getSandboxFiles('images/' + imageName);copyFileSync(filePath, sandboxPath);const bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_REQUESTED_PERMISSION;let bundleName = bundleManager.getBundleInfoForSelfSync(bundleFlags).name; // 以同步方法根据给定的bundleFlags获取当前应用的BundleInfo。return `file://${bundleName}${sandboxPath}`;}});})
}

使用

import { selectImages } from '../../utils/file';// 相片路径
@State tagImage: string = ''// 点击拉起相册
.onClick(() => {selectImages().then((res: string[]) => {if(res.length) {this.tagImage = res[0]}})
})// 显示
Image(tagImage).width(50).height(50).borderRadius(25);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词