更新记录

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

  1. 需要在 AndroidManifest.xml 添加权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
  1. Android 13+ 需要动态申请权限

iOS

  1. 需要在 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: truequality: 80(0-100)。

4. 支持 HarmonyOS 吗?

正在开发中,预计 v1.1.0 支持。


开箱即用,节省 3 天开发时间!

隐私、权限声明

1. 本插件需要申请的系统权限列表:

读取外部存储(用于访问文件) 相机(用于拍照)

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据,仅访问用户主动选择的文件

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。