​ 【关键字】

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. Qt源码阅读(四) 事件循环

    事件系统 文章为本人理解,如有理解不到位之处,烦请各位指正. @ 目录 事件系统 什么是事件循环? 事件是如何产生的? sendEvent postEvent 事件是如何处理的? 事件循环是怎么遍历的 ...

  2. Git Commit Message 应该怎么写?

    原文链接: Git Commit Message 应该怎么写? 最近被同事吐槽了,说我代码提交说明写的太差.其实都不用他吐槽,我自己心里也非常清楚.毕竟很多时候犯懒,都是直接一个 -m "f ...

  3. 有一个公网IP地址

    这几天在家里拉了一条300M+的宽带,但是遇到了一些坑,本文就简单说明一下如下: 突发此次需求是这样的:阿里云有台服务器公网带宽是1M的,虽说带宽小,但是数据中心的服务器显然是稳定的,只是带宽太小,有 ...

  4. Proxmox VE镜像分析与定制

    Proxmox VE(Proxmox Virtual Environment,简称PVE)是一个开源的服务器虚拟化环境Linux发行版,基于Debian,使用给予Ubuntu的定制内核.相比于其他虚拟 ...

  5. KubeSphere 高可用集群搭建并启用所有插件

    介绍 大多数情况下,单主节点集群大致足以供开发和测试环境使用.但是,对于生产环境,您需要考虑集群的高可用性.如果关键组件(例如 kube-apiserver.kube-scheduler 和 kube ...

  6. 进程,Process模块,join方法,ipc机制,守护进程

    多道技术: """ 在学习并发编程的过程中 不做刻意提醒的情况下 默认一台计算机就一个CPU(只有一个干活的人) """ 单道技术 所有的程 ...

  7. 【Vue项目】商品汇前台(一)组件拆分+请求封装

    写在最前面 之前学完vue基础之后,一直想做一下前端的项目,但是自己写了一点前后端分离的项目发现自己前端写的是真的乱,所以趁着假期的空闲做一下尚硅谷商品汇的前后台项目,争取这周写完前台,然后这个月再写 ...

  8. Visual Studio Code 常见的配置、常用好用插件以及【vsCode 开发相应项目推荐安装的插件】

    一.VsCode 常见的配置 1.取消更新 把插件的更新也一起取消了 2.设置编码为utf-8:默认就是了,不用设置了 3.设置常用的开发字体:Consolas, 默认就是了,不用设置了 字体对开发也 ...

  9. Python argparse参数管理学习笔记1

    1.前言 最近尝试学习使用argparse进行参数管理,顺便改善一下我那丝毫都不专业的.简单粗暴的代码习惯. argparse模块可以让人轻松地编写用户友好地命令行接口,并且还能够自动生成帮助与使用手 ...

  10. Gradio入门到进阶全网最详细教程[一]:快速搭建AI算法可视化部署演示(侧重项目搭建和案例分享)

    Gradio入门到进阶全网最详细教程[一]:快速搭建AI算法可视化部署演示(侧重项目搭建和案例分享) 常用的两款AI可视化交互应用比较: Gradio Gradio的优势在于易用性,代码结构相比Str ...