更新记录
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): 手动删除指定索引的文件。