更新记录

1.0.1(2026-06-09) 下载此版本

优化样式

1.0.0(2026-06-09) 下载此版本

支持APP文件选择(png,jpg,pdf,doc等)上传


平台兼容性

uni-app(5.12)

Vue2 Vue2插件版本 Vue3 Vue3插件版本 Chrome Chrome插件版本 Safari Safari插件版本 app-vue app-vue插件版本 app-nvue Android Android插件版本 iOS iOS插件版本 鸿蒙
1.0.0 1.0.0 1.0.0 1.0.0 1.0.0 - 4.4 1.0.0 12 1.0.0 -
微信小程序 微信小程序插件版本 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
1.0.0

uni-app x(5.12)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - - - - -

其他

多语言 暗黑模式 宽屏模式
×

core-upload (无头上传组件)

一个只专注于 逻辑解耦 的 UniApp 跨端通用上传组件,专为有着高频定制 UI 需求的企业级应用打造。

🎯 核心特性

  • UI 与逻辑彻底解耦:使用 Vue3 作用域插槽 (Scope Slot) 进行 UI 控制,如果你不传插槽,默认提供极简的回显和上传按钮。
  • 完美的跨端适配
    • APP 端 内置了 s-file-picker 原生 UTS 逻辑,开箱即用,绕过繁琐的原生权限限制。
    • 小程序端 自动降级为 uni.chooseMedia / uni.chooseMessageFile
    • H5 端 自动使用 uni.chooseFile
  • 内置上传队列:全自动的网络请求控制与上传状态(进度条、成功、失败)分发,业务侧只需关注 v-model 回显。

💻 基本用法

1. 使用默认 UI (开箱即用)

<template>
  <core-upload
    v-model="fileList"
    action="https://www.example.com/api/upload"
    :headers="{ token: '123' }"
    @success="handleSuccess"
  />
</template>

<script setup>
import { ref } from 'vue';
const fileList = ref([]);
const handleSuccess = ({ file, response }) => {
  console.log('上传成功', response);
};
</script>

2. 深度定制 UI (Headless 核心玩法)

通过 #item#default 插槽完全接管渲染。

<template>
  <core-upload
    v-model="fileList"
    action="https://www.example.com/api/upload"
    accept="image"
  >
    <!-- 1. 定制文件列表展示 -->
    <template #item="{ file, index, deleteItem }">
      <view class="my-custom-file">
        <image :src="file.url" mode="aspectFill"></image>
        <text>进度: {{ file.progress }}%</text>
        <button size="mini" @click="deleteItem">删除</button>
      </view>
    </template>

    <!-- 2. 定制触发上传按钮 -->
    <template #default="{ disabled, triggerPick }">
      <button :disabled="disabled" type="primary" @click="triggerPick">
        点击上传图片
      </button>
    </template>
  </core-upload>
</template>

🛠 参数说明 (Props)

参数名 类型 默认值 说明
v-model Array [] 组件绑定的标准文件列表数据
action String '' 必填。上传的接口地址
headers Object {} 请求头(例如可以携带 Token)
formData Object {} 额外的 formData 业务参数
name String 'file' 发送到后端的 file 对应的 key 名称
accept String 'all' 允许的文件类型:image | video | file | all
multiple Boolean true 是否允许多选
limit Number 9 最大上传文件数量
maxSize Number MAX_VALUE 单个文件体积上限 (单位:MB)
autoUpload Boolean true 是否在选中文件后立刻自动触发上传
disabled Boolean false 是否禁用组件

⚡ 事件说明 (Events)

事件名 参数 说明
@change (fileList) 绑定的文件列表发生变化时触发(选中、删除、状态变化)
@success ({ file, response, index }) 单个文件上传成功时触发,response 为服务端返回结果
@error ({ file, error, index }) 单个文件上传失败时触发
@delete ({ file, index }) 用户主动删除某个文件时触发
@oversize (file) 当选择的文件超出 maxSize 限制时触发

🔧 Expose 暴露方法

如果您希望在外部利用 ref 强行控制行为:

  • triggerPick(): 强行主动调起底层设备的文件选择弹窗。
  • deleteItem(index): 手动删除指定索引的文件。

隐私、权限声明

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

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

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

许可协议

MIT协议

暂无用户评论。