​ 【关键字】

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参考:

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/js-apis-medialibrary-0000001544584077-V3

@ohos.fileio API参考:

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/js-apis-fileio-0000001478181641-V3

【HarmonyOS】如何获取公共目录的图片等文件(API7 FA模型JS语言)的更多相关文章

  1. php获取指定目录下的所有文件列表

    在我们实际的开发需求中,经常用到操作文件,今天就讲一下关于获取指定目录下的所有文件的几种常用方法: 1.scandir()函数 scandir() 函数返回指定目录中的文件和目录的数组. scandi ...

  2. C++:获取指定目录下的所有文件

    1.获得指定目录下的所有文件(不搜索子文件夹) 需要包含的头文件 #include <io.h> #include <string> #include <vector&g ...

  3. 利用 FilesystemIterator 获取指定目录下的所有文件

    /** * 获取指定目录下的所有文件 * @param null $path * @return array */ public function getFileByPath($path = null ...

  4. File常用的方法操作、在磁盘上创建File、获取指定目录下的所有文件、File文件的重命名、将数据写入File文件

    文章目录 1.基本介绍 2.构造方法 3.常用的方法 4.代码实例 4.1 创建文件和目录(目录不存在) 4.1.1 代码 4.1.2 测试结果 4.2 测试目录存在的情况.直接写绝对的路径名 4.2 ...

  5. c# 获取指定目录下的所有文件并显示在网页上

    参考文献: FileInfo 的使用  https://msdn.microsoft.com/zh-cn/library/system.io.fileinfo_methods(v=vs.110).as ...

  6. Java获取/resources目录下的资源文件方法

    Web项目开发中,经常会有一些静态资源,被放置在resources目录下,随项目打包在一起,代码中要使用的时候,通过文件读取的方式,加载并使用: 今天总结整理了九种方式获取resources目录下文件 ...

  7. Qt5读取系统环境变量和获取指定目录下的所有文件夹绝对路径

    头文件 /// 读取环境变量使用 #include <QProcessEnvironment> /// 遍历文件夹使用 #include <QDir> 核心代码 一个例子, 输 ...

  8. Android获取res目录下图片的uri

    Uri.parse("android.resource://" + getApplicationContext().getPackageName() + "/" ...

  9. java 递归获取一个目录下的所有文件路径

    还是日志的问题,log4j生成的日志文件,自动保存到月份所在的文件夹中,需要获取到所有的日志文件,包括文件夹 private List<String> ergodic(File file, ...

  10. svnkit递归获取指定目录下的全部文件

    package demo.wc; import java.util.Collection; import java.util.Iterator; import org.tmatesoft.svn.co ...

随机推荐

  1. Docker常用软件安装

    jdk dockere pull openjdk:11 docker run -d -t --name java-11 openjdk:11 MySQL 可以从docker hup中查找自己想要安装的 ...

  2. flask配置config详解

    flask系列讲座与2017年12月6日开始,每周一篇.第三篇其中讲述flask的配置方法.使用app.config.from_object()方法,似乎很神奇.如果明白背后逻辑,实际上很自然.涉及代 ...

  3. sync.Pool:提高Go语言程序性能的关键一步

    1. 简介 本文将介绍 Go 语言中的 sync.Pool并发原语,包括sync.Pool的基本使用方法.使用注意事项等的内容.能够更好得使用sync.Pool来减少对象的重复创建,最大限度实现对象的 ...

  4. 用Abp实现双因素认证(Two-Factor Authentication, 2FA)登录(一):认证模块

    @ 目录 原理 用户验证码校验模块 双因素认证模块 改写登录 在之前的博文 用Abp实现短信验证码免密登录(一):短信校验模块 一文中,我们实现了用户验证码校验模块,今天来拓展这个模块,使Abp用户系 ...

  5. 四月十九号java基础知识

    1.总括:类的继承是使用已有的类为基础派生出新的类.通过类继承的方式,便能开发出新的类,而不需要编写相同的程序代码,所以说类的继承是程序代码再利用的概念抽象与接口都是类概念的扩展.通过继承扩展出的子类 ...

  6. Python实现网络工具

    使用python编写网络工具 基础内容 介绍基本的网络编程 Socket编程 Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请 ...

  7. C# 从0到实战--程序入门:基本程序结构·hello,world

    为什么要写博客 某人是一名大学生,到了大二,学院开始教授.Net,从这里我接触到了C#和ASP.Net,这些技术让我感到了想不到的快速开发之震撼.于是突发奇想,写此博客来记录我的学习路程.博客不仅仅是 ...

  8. Indent----- IndentationError: unexpected indent

    Unexpected indent 错误 注意,Python 中实现对代码的缩进,可以使用空格或者 Tab 键实现.但无论是手动敲空格,还是使用 Tab 键,通常情况下都是采用 4 个空格长度作为一个 ...

  9. MySQL-InnoDB磁盘结构

    主要阐述InnoDB存储引擎(MySQL5以后的默认引擎). 数据库中最基本的组成结构是数据表,视觉上的表和其对应的磁盘结构如下: 此图参考了厦门大学课堂:MySQL原理 .但是视频中一些更多细节没有 ...

  10. 如何借助分布式存储 JuiceFS 加速 AI 模型训练

    传统的机器学习模型,数据集比较小,模型的算法也比较简单,使用单机存储,或者本地硬盘就足够了,像 JuiceFS 这样的分布式存储并不是必需品. 随着近几年深度学习的蓬勃发展,越来越多的团队开始遇到了单 ...