​ 【关键字】

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. Lodash中常用函数,不建议经常使用,容易让人变懒忘了原生函数

    1.N次循环 <script type="text/javascript"> console.log('------- javascript -------'); // ...

  2. 记一次 .NET 某手术室行为信息系统 内存泄露分析

    一:背景 1. 讲故事 昨天有位朋友找到我,说他的程序内存存在泄露导致系统特别卡,大地址也开了,让我帮忙看一下怎么回事?今天上午看了下dump,感觉挺有意思,在我的分析之旅中此类问题也蛮少见,算是完善 ...

  3. 教你如何通过CodeArts IDE插件调用API,高效合成语音

    摘要:本实验基于华为云自研CodeArts IDE,指导用户通过使用华为云API,来实现一个文字合成语音的应用. 本文分享自华为云社区<通过CodeArts IDE插件调用API,高效合成语音! ...

  4. webrtc QOS笔记二 音频buffer数据不足生成很多gap的问题

    webrtc QOS笔记二 音频buffer数据不足生成很多gap的问题 目录 webrtc QOS笔记二 音频buffer数据不足生成很多gap的问题 记录个iusse. 插入音频数据后,GetAu ...

  5. Ubuntu2204部署容器引擎Containerd

    为什么使用containerd? 使用containerd的原因主要有两点吧,第一个是docker在k8s1.24以后不再支持,如果需要在k8s中继续使用docker作为容器引擎,我们需要额外部署cr ...

  6. Java设计模式 —— 适配器模式

    9 适配器模式 9.1 结构型模式 结构型模式(Structural Pattern) 关注如何将现有类或对象组织在一起形成更强大的结构.结构型模式根据描述目标不同可以分为两种: 类结构型模式:关心类 ...

  7. [数据库]MYSQL之授予/查验binlog权限

    在后端做主从备份:亦或是在大数据领域中,各类CDC同步(Canal / Flink CDC等),均会基于MYSQL的binlog来实现. 因此,知道需要哪些权限?怎么查验去.怎么授权就很重要了. 感觉 ...

  8. 用Python语言进行时间序列ARIMA模型分析

    应用时间序列 时间序列分析是一种重要的数据分析方法,应用广泛.以下列举了几个时间序列分析的应用场景: 1.经济预测:时间序列分析可以用来分析经济数据,预测未来经济趋势和走向.例如,利用历史股市数据和经 ...

  9. Linux中重定向应注意的事情

    引言 你是否见过bash ... 2>&1 1>file.txt的写法? 还没发现这样的写法有什么问题? 那么恭喜你, 看完本文你又将学会一个新知识! 重定向的错误用法 以引言中命 ...

  10. Unity2021SteamingAssets数量限制导致打包异常解决

    最近将项目从Unity2019升级到Unity2021,打包安卓的时候出现异常.查了下资料说是数量超出限制,需要设置不压缩的数量. 1. 使用自定义mainTemplate.gradle 打开编辑,a ...