更新记录
1.0.0(2026-07-13)
1.0.0 首次发布
- 支持选择图片、视频、音频、文档
- 支持多选(最多 9 个)
- 支持拍照、录视频
- 支持图片压缩
- 完整的 TypeScript 类型定义
- Android/iOS 双平台支持
平台兼容性
ljl-file-picker - 文件选择器 UTS 插件
原生文件选择器插件,支持图片、视频、文档多选,实时预览,压缩上传
✨ 功能特性
- ✅ 多种文件类型:图片、视频、音频、文档
- ✅ 多选支持:最多支持 9 个文件
- ✅ 拍照/录像:直接调用相机
- ✅ 图片压缩:自动压缩减少流量
- ✅ 完美兼容:Android、iOS 双平台
- ✅ 类型安全:完整的 TypeScript 类型定义
- ✅ 开箱即用:无需配置,一行代码调用
📦 安装
在 HBuilderX 中,搜索 ljl-file-picker 并导入即可。
🚀 快速开始
1. 导入插件
import FilePicker from '@/uni_modules/ljl-file-picker'
2. 选择图片
// 单选图片
const result = await FilePicker.chooseFile({
type: 'image',
multiple: false
})
if (result.success) {
console.log('选择的文件:', result.files)
}
3. 多选文件
// 多选文件(最多 9 个)
const result = await FilePicker.chooseFile({
type: 'all',
multiple: true,
maxCount: 9
})
4. 拍照
const result = await FilePicker.takePhoto({
compress: true,
quality: 80
})
5. 录视频
const result = await FilePicker.takeVideo({})
📖 API 文档
chooseFile(options)
选择文件
参数:
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| type | String | 否 | 'all' | 文件类型:'image', 'video', 'audio', 'document', 'all' |
| multiple | Boolean | 否 | false | 是否多选 |
| maxCount | Number | 否 | 9 | 最多选择数量 |
| compress | Boolean | 否 | false | 是否压缩(仅图片) |
| quality | Number | 否 | 80 | 压缩质量 0-100 |
| maxSize | Number | 否 | 10 | 文件大小限制(MB) |
返回值:
interface FilePickerResult {
success: boolean
errMsg?: string
files: FileResult[]
}
interface FileResult {
path: string // 文件路径
name: string // 文件名
size: number // 文件大小(字节)
type: string // 文件类型
width?: number // 宽度(图片/视频)
height?: number // 高度(图片/视频)
duration?: number // 时长(视频/音频,秒)
}
takePhoto(options)
拍照
参数: 同 chooseFile
返回值: 同 chooseFile
takeVideo(options)
录视频
参数: 同 chooseFile
返回值: 同 chooseFile
🎯 使用场景
- ✅ 用户头像上传
- ✅ 朋友圈/动态发布
- ✅ 表单文件上传
- ✅ 聊天发送图片/视频
- ✅ 文档管理系统
- ✅ 电商商品图片上传
📱 平台兼容
| 平台 | 支持情况 |
|---|---|
| Android | ✅ |
| iOS | ✅ |
| HarmonyOS | 开发中 |
⚠️ 注意事项
Android
- 需要在
AndroidManifest.xml添加权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
- Android 13+ 需要动态申请权限
iOS
- 需要在
Info.plist添加权限说明:
<key>NSCameraUsageDescription</key>
<string>需要访问相机拍照</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>需要访问相册选择照片</string>
🔥 完整示例
<template>
<view class="container">
<button @click="chooseImage">选择图片</button>
<button @click="takePhoto">拍照</button>
<button @click="chooseMultiple">多选文件</button>
<view v-for="(file, index) in files" :key="index">
<image :src="file.path" mode="aspectFill"></image>
<text>{{ file.name }} ({{ formatSize(file.size) }})</text>
</view>
</view>
</template>
<script setup>
import { ref } from 'vue'
import FilePicker from '@/uni_modules/ljl-file-picker'
const files = ref([])
// 选择图片
const chooseImage = async () => {
const result = await FilePicker.chooseFile({
type: 'image',
multiple: false,
compress: true,
quality: 80
})
if (result.success) {
files.value = result.files
} else {
uni.showToast({
title: result.errMsg,
icon: 'none'
})
}
}
// 拍照
const takePhoto = async () => {
const result = await FilePicker.takePhoto({
compress: true,
quality: 80
})
if (result.success) {
files.value = result.files
}
}
// 多选文件
const chooseMultiple = async () => {
const result = await FilePicker.chooseFile({
type: 'all',
multiple: true,
maxCount: 9
})
if (result.success) {
files.value = result.files
}
}
// 格式化文件大小
const formatSize = (bytes) => {
if (bytes < 1024) return bytes + ' B'
if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(2) + ' KB'
return (bytes / (1024 * 1024)).toFixed(2) + ' MB'
}
</script>
💰 购买说明
- 普通授权版:¥149(支持商业项目,不提供源码)
- 源码授权版:¥799(提供完整源码,可二次开发)
购买后可用于无限个项目,终身使用。
📞 技术支持
- 插件文档:https://ext.dcloud.net.cn/plugin?id=ljl-file-picker
- 问题反馈:GitHub Issues
- QQ 交流群:待建立
📄 开源协议
商业插件,购买后可用于商业项目。
常见问题
1. Android 13+ 选择文件没反应?
Android 13+ 需要动态申请 READ_MEDIA_IMAGES 权限。
2. iOS 拍照后没有回调?
检查 Info.plist 是否添加了相机权限说明。
3. 如何压缩图片?
设置 compress: true 和 quality: 80(0-100)。
4. 支持 HarmonyOS 吗?
正在开发中,预计 v1.1.0 支持。
✅ 开箱即用,节省 3 天开发时间!

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 0
赞赏 0
下载 12423561
赞赏 1934
赞赏
京公网安备:11010802035340号