【HarmonyOS】如何获取公共目录的图片等文件(API7 FA模型JS语言)
【关键字】
API7、JS、公共目录、@ohos.multimedia.mediaLibrary
【前言】
在使用API7 JS开发HarmonyOS应用时,需要获取非应用目录即内部存储公共目录下的图片,查找资料发现官网提供 @ohos.multimedia.medialibrary (媒体库管理) 可以访问和修改个人媒体数据信息,尝试后发现可以通过getFileAssets和getAllObject配合使用,获取公共目录下的所有图片;若获取其他格式的文件,通过此方法可同样获取,此处以图片为例。
【开发步骤】
步骤1:根据官方文档,调用getFileAssets方法需要申请ohos.permission.READ_MEDIA权限,需要在配置文件module.json5中添加权限,如下:
"requestPermissions": [
{
"name": "ohos.permission.READ_MEDIA",
"usedScene": {
"when": "always"
}
}
]
步骤2:获取媒体库实例,支持在FA模型下使用,代码如下所示:
import mediaLibrary from '@ohos.multimedia.mediaLibrary';
let media = mediaLibrary.getMediaLibrary();
步骤3:调用getFileAssets获取文件资源,并通过getAllObject方法获取所有的返回结果,获取返回结果中获取thumbnailUri数据在image的src中显示(经测试,uri无法正确显示,thumbnailUri可以),代码如下所示:
// js文件中,定义数组
data: {
imgList: [],
},
// js文件获取文件资源并处理返回结果
let fileKeyObj = mediaLibrary.FileKey;
let imageType = mediaLibrary.MediaType.IMAGE;
let imagesFetchOp = {
selections: fileKeyObj.MEDIA_TYPE + '= ?',
selectionArgs: [imageType.toString()],
};
let fetchFileResult = await media.getFileAssets(imagesFetchOp);
fetchFileResult.getAllObject((err, fileAsset) => {
if (err) {
console.error('Failed ');
return;
}
let tempList = [];
for (let i = 0; i < fetchFileResult.getCount(); i++) {
console.log('fileAsset : ' + JSON.stringify(fileAsset[i]));
console.log('fileAsset.thumbnailUri : ' + fileAsset[i].thumbnailUri);
tempList[i] = fileAsset[i].thumbnailUri;
}
this.imgList = tempList;
})
步骤4:获取到imageList数组后,就可以通过for循环显示image了。
// html中for循环显示图片
<image class="imglist" for="{{imgList}}" src="{{$item}}"></image>
【注意事项】
1、使用个人媒体数据信息时,一定要申请ohos.permission.READ_MEDIA权限;
2、此方法为获取公共目录下文件,若需要获取应用沙箱路径下文件资源,可使用 @ohos.fileio 中开放API接口;
3、@ohos.multimedia.medialibrary 媒体库管理从API9开始废弃,部分功能变更为系统接口,仅供系统应用使用,媒体资源选择和保存功能仍开放给普通应用,请使用@ohos.file.picker相应接口替代。
4、此方法获取的文件资源信息fileAsset中,有大小、名称、路径等信息,若需要获取某一个公共路径下的资源文件,可利用返回结果中relativePath去判断,返回完整信息参考如下:
{"id_":2410,"uri_":"dataability:///media/external/images/media/2410","mimeType_":"image/jpeg","mediaType_":"1","displayName_":"111.jpg","title_":"111","relativePath_":"DCIM/Camera/","parent_":1249,"size_":960917,"dateAdded_":1686014825,"dateModified_":1679041572,"dateTaken_":0,"artist_":"","audioAlbum_":"","width_":2340,"height_":2340,"orientation_":0,"duration_":0,"albumId_":-1739773001,"albumUri_":"dataability:///media/external/images/media/2410","albumName_":"Camera","thumbnailUri_":"dataability:///media/external/images/media/53687091200002410","isFavorite_":0,"isTrashed_":0,"extendedValues_":{},"osMediaType":"1","osRelativePath":"DCIM/Camera/","oldTitle":"111"}
【参考文档】
@ohos.multimedia.medialibrary API参考:
@ohos.fileio API参考:
【HarmonyOS】如何获取公共目录的图片等文件(API7 FA模型JS语言)的更多相关文章
- php获取指定目录下的所有文件列表
在我们实际的开发需求中,经常用到操作文件,今天就讲一下关于获取指定目录下的所有文件的几种常用方法: 1.scandir()函数 scandir() 函数返回指定目录中的文件和目录的数组. scandi ...
- C++:获取指定目录下的所有文件
1.获得指定目录下的所有文件(不搜索子文件夹) 需要包含的头文件 #include <io.h> #include <string> #include <vector&g ...
- 利用 FilesystemIterator 获取指定目录下的所有文件
/** * 获取指定目录下的所有文件 * @param null $path * @return array */ public function getFileByPath($path = null ...
- File常用的方法操作、在磁盘上创建File、获取指定目录下的所有文件、File文件的重命名、将数据写入File文件
文章目录 1.基本介绍 2.构造方法 3.常用的方法 4.代码实例 4.1 创建文件和目录(目录不存在) 4.1.1 代码 4.1.2 测试结果 4.2 测试目录存在的情况.直接写绝对的路径名 4.2 ...
- c# 获取指定目录下的所有文件并显示在网页上
参考文献: FileInfo 的使用 https://msdn.microsoft.com/zh-cn/library/system.io.fileinfo_methods(v=vs.110).as ...
- Java获取/resources目录下的资源文件方法
Web项目开发中,经常会有一些静态资源,被放置在resources目录下,随项目打包在一起,代码中要使用的时候,通过文件读取的方式,加载并使用: 今天总结整理了九种方式获取resources目录下文件 ...
- Qt5读取系统环境变量和获取指定目录下的所有文件夹绝对路径
头文件 /// 读取环境变量使用 #include <QProcessEnvironment> /// 遍历文件夹使用 #include <QDir> 核心代码 一个例子, 输 ...
- Android获取res目录下图片的uri
Uri.parse("android.resource://" + getApplicationContext().getPackageName() + "/" ...
- java 递归获取一个目录下的所有文件路径
还是日志的问题,log4j生成的日志文件,自动保存到月份所在的文件夹中,需要获取到所有的日志文件,包括文件夹 private List<String> ergodic(File file, ...
- svnkit递归获取指定目录下的全部文件
package demo.wc; import java.util.Collection; import java.util.Iterator; import org.tmatesoft.svn.co ...
随机推荐
- 【深入浅出 Yarn 架构与实现】5-3 Yarn 调度器资源抢占模型
本篇将对 Yarn 调度器中的资源抢占方式进行探究.分析当集群资源不足时,占用量资源少的队列,是如何从其他队列中抢夺资源的.我们将深入源码,一步步分析抢夺资源的具体逻辑. 一.简介 在资源调度器中,以 ...
- react webpack自定义配置
在react当中,webpack的配置是被隐藏了的,如果想要配置webpack,有两种方法: 一.暴露出webpack的配置文件(不推荐) 执行 npm run eject 二.使用craco添加配置 ...
- 第一推动|2023年VSCode插件最新推荐(54款)
本文介绍前端开发领域常用的一些VSCode插件,插件是VSCode最重要的组成部分之一,本文列出了我自己在以往工作经验中积累的54款插件,个人觉得这些插件是有用或有趣的,根据它们的作用,我粗略的把它们 ...
- 从零开始学Vue(一)—— Vue.js 入门
概述 vue.js作为现在笔记热门的JS框架,使用比较简单易上手,也成为很多公司首选的JS框架. 但是对于初学者可能学起来有些麻烦,所以推出<从零开始学Vue>系列博客,本系列计划推出19 ...
- $.set() 处理非响应式案例
<template> <div id="app"> <ul> <li v-for="item in list" :ke ...
- 从 1 秒到 10 毫秒!在 APISIX 中减少 Prometheus 请求阻塞
本文介绍了 Prometheus 插件造成长尾请求现象的原因,以及如何解决这个问题. 作者屠正松,Apache APISIX PMC Member. 原文链接 现象 在 APISIX 社区中,曾有部分 ...
- 如何获取苹果设备的UDID(iPhone/iPad UDID查询方法)
方法一.通过电脑连接苹果手机后查询 1.在电脑上下载并安装爱思助手,安装完成后将电脑和苹果手机使用苹果数据线连接起来: 编辑切换为居中 添加图片注释,不超过 140 字(可选) 然后启动爱思助 ...
- 实现异步操作CompletableFuture
多个线程异步操作后统一返回执行结果AtomicReference<RespVo> event = new AtomicReference<>(); AtomicReferenc ...
- node使用react项目启动错误TSError: ⨯ Unable to compile TypeScript:
1.错误内容 return new TSError(diagnosticText, diagnosticCodes) ^ TSError: ⨯ Unable to compile TypeScript ...
- Java方法的返回值及注意事项
方法的返回值 为什么要有带返回值的方法呢? 调用处拿到方法的结果之后,才能根据结果进行下一步操作 带返回值方法的定义和调用: 如果在调用处,要根据方法的结果去编写另一段代码逻辑 为了在调用处拿到方法产 ...