【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 ...
随机推荐
- noopener, noreferrer 及 nofollow 的用法
<a> 标签通常会配合着使用 noopener, noreferrer 及 nofollow 这些属性, 它们的作用及用法如下. noopener 当给链接加上 target=" ...
- react之点语法(利用函数组件)
index.js import React, { Component } from 'react' import MyCom from './MyCom'; export default class ...
- 我没能实现始终在一个线程上运行 task
前文我们总结了在使用常驻任务实现常驻线程时,应该注意的事项.但是我们最终没有提到如何在处理对于带有异步代码的办法.本篇将接受笔者对于该内容的总结. 如何识别当前代码跑在什么线程上 一切开始之前,我们先 ...
- 3d基础 - 从模型坐标到屏幕坐标
在 3D 引擎中,场景通常被描述为三维空间中的模型或对象,每个模型对象由许多三维顶点组成.最终,这些模型对象将在平面屏幕上呈现和显示. 渲染场景始终相对于摄像机,因此,还必须相对于摄像机的视图定义场景 ...
- Spring 源码阅读之标签解析
全局目录.md 引子 1.容器最基本使用.md 系列1 - bean 标签解析: 2.XmlBeanFactory 的类图介绍.md 3.XmlBeanFactory 对xml文件读取.md 4.xm ...
- [Linux]CentOS查看RPM包依赖问题
[经典应用案例] 查看此文前,可先查看 此博文中:在安装软件过程中,如何解决的依赖组件问题? [数据库/Linux]CentOS7安装MySQL Percona版(RPM方式) : 2-1 依赖组件问 ...
- 一文吃透Arthas常用命令!
Arthas 常用命令 简介 Arthas 是Alibaba开源的Java诊断工具,动态跟踪Java代码:实时监控JVM状态,可以在不中断程序执行的情况下轻松完成JVM相关问题排查工作 .支持JDK ...
- Redis(八)redis新功能
redis6新功能 1 ACL Redis ACL是AccessControlList(访问控制表)的缩写,该功能允许根据可以执行的命令和访问的键来限制某些连接. 2 基本命令 acl help &g ...
- PyG 图神经网络依赖环境安装(Anaconda)
1.默认用户在Anaconda的虚拟环境中已安装Pytorch 2.打开anaconda prompt命令窗, activate "你的虚拟环境名称" 3.在激活后的虚拟环境下输入 ...
- 探索FSM (有限状态机)应用
我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值.. 本文作者:木杪 有限状态机(FSM) 是计算机科学中的一种数学模型 ...