背景

一次项目中需要获取用户手机相册文件并且需要按照ui给的原型渲染;经过百度发现uniapp提供的Api不符合需求,插件市场的插件都是组件插件带有自己的选择页面也不符合需求;所以自己开发了这个插件

使用的技术

由uniapp推出的UTS插件,可以使用ts编写,直接调用原生api能力,需要有一定的Android开发基础;

下载地址

https://ext.dcloud.net.cn/plugin?id=26519

获取手机媒体文件,支持分页,自动缓存,支持返回缩略图

  • 支持单独搜索图片,视频或者一并查询
  • 自动生成缩略图并缓存在应用下目录,保存的目录为应用缓存目录/cache_thumbnails;缩略图仅生成一份,后续访问同一份文件只会返回已经生成的缩略图
  • 响应包含文件名称、创建时间、大小、文件路径,缩略图路径,视频时长

uniapp使用示例

<script lang="ts" setup>
import { ref } from 'vue'
import { getMedias, clearThumbnailCache } from "@/uni_modules/mrctx-media-plugin"

const mediaList = ref([])
const test1 = async () =>{
	const page = 1
	const pageSize = 10
	const type = 'all'
	// console.log(test())
	getMedias({
		page, //当前页,必须为number类型,必填
		pageSize, // 页大小,必须为number类型,必填
		type,	// 查询的文件类型,类型有'image' | 'video' | 'all'中的一个,如果传all,将根据pageSize的一半来分别查询视频和图片,最后降序排序返回
		success: (res) =>{
			console.log('调用成功=>', res)
            // 响应示例
            //{
    		//"page": 1, 当前页码
    		//"pageSize": 10, 页大小
    		//"type": "all", 查询的类型
    		//"data": [
        		//{
            		//"id": 1000024067, 文件id
            		//"name": "V20251227-201826.mp4", 文件名称
            		//"thumbnail": 缩略图路径"/storage/emulated/0/Android/data/io.dcloud.HBuilder/cache/cache_thumbnails/media_plugin_V20251227-201826_-1539686654_1768026021585.jpg",
            		//"size": 1290358663, 文件大小 单位 KB
            		//"uri": "/storage/emulated/0/DCIM/Video/V20251227-201826.mp4",
           		 	//"duration": 228.987, 视频时长 单位:秒
            		//"type": "video",	文件类型
            		//"date": 1766838135000  创建时间
        		//},
    		//]
}
			mediaList.value = res.data
		},
		fail: (err) =>{
			console.log('调用失败=>', err)
        	// 具体异常信息请看下方异常信息章节
		},
		complete: (res) =>{
			console.log("函数调用完成=>", res)
		}
	})
}

const test2 = async () =>{
	const res = await clearThumbnailCache()
	uni.showModal({
		title: '提示',
		content: JSON.stringify(res)
	})
}
	
</script>

错误信息

  [1001, 'The page parameter needs to be of type number'],
  [1002, 'The pageSzie parameter needs to be of type number'],
  [1003, "The type parameter should be one of 'image', 'video', or 'all' and must be a string"],
  [1011, '没有相册读取权限']
  // 插件会判断有没有该权限,使用分区存储,不再需要外部存储权限
  // 但继续检查 MANAGE_EXTERNAL_STORAGE权限
  // 但经过测试,检查该权限返回false时仍可以正常将缩略图缓存在缓存目录
  // 其他版本的系统仍正常判断
  [1012, '没有文件读取权限']
  [1090, error] // 内部函数执行错误,会在stackTrace返回堆栈信息

异常信息

{
    "errSubject": "mrctx-media-plugin",
    "stackTrace": [],
    "message": "",
    "errMsg": "没有相册读取权限",
    "suppressedExceptions": [],
    "name": "Error",
    "errCode": 1011
}

使用效果

在这里插入图片描述
在这里插入图片描述

支持

后续持续更新,将支持IOS,鸿蒙等系统!

将更新更多功能~

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐