更新记录
1.0.0(2026-03-16)
下载此版本
1.0.0
平台兼容性
uni-app(4.87)
| Vue2 |
Vue3 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
| - |
√ |
√ |
√ |
- |
- |
- |
- |
- |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
小红书小程序 |
快应用-华为 |
快应用-联盟 |
| √ |
√ |
√ |
√ |
√ |
√ |
- |
√ |
√ |
√ |
- |
- |
una-upload-resource
uni-app(小程序)上传资源组件,支持上传图片、视频、或两者混传,内置预览、删除、可选自动上传、文件大小校验、视频时长校验、上传前图片压缩。
功能特性
- 支持资源类型:
image / video / all
- 支持最大数量限制:
maxCount
- 支持
v-model 双向绑定资源列表
- 支持自动上传(
uni.uploadFile)或仅选择本地文件
- 支持图片预览、视频预览
- 支持文件大小与视频时长校验
- 支持上传前图片压缩(质量、阈值、尺寸可控)
快速使用
<template>
<view>
<una-upload-resource
v-model="resourceList"
acceptType="all"
:maxCount="9"
uploadUrl="https://your-api/upload"
uploadName="file"
:header="{ Authorization: token }"
:formData="{ bizType: 'material' }"
:enableFileSizeCheck="true"
:maxFileSizeMB="20"
:enableVideoDurationCheck="true"
:maxVideoDuration="30"
:enableCompressImage="true"
:compressQuality="70"
:compressThresholdMB="1.5"
:compressWidth="1280"
@change="onChange"
@uploaded="onUploaded"
@validate-fail="onValidateFail"
@upload-error="onUploadError"
/>
</view>
</template>
<script>
export default {
data() {
return {
token: "Bearer xxx",
resourceList: []
};
},
methods: {
onChange(list) {
console.log("资源列表变化", list);
},
onUploaded(e) {
console.log("单个文件上传成功", e);
},
onValidateFail(e) {
console.log("资源校验失败", e);
},
onUploadError(e) {
console.log("上传失败", e);
}
}
};
</script>
Props
| 参数 |
类型 |
默认值 |
说明 |
| modelValue |
Array |
[] |
资源列表(v-model) |
| acceptType |
String |
all |
可选:image / video / all |
| maxCount |
Number |
9 |
最大上传数量 |
| uploadUrl |
String |
"" |
上传接口地址;不传则只选择本地文件 |
| uploadName |
String |
file |
上传字段名 |
| header |
Object |
{} |
上传请求头 |
| formData |
Object |
{} |
上传附加参数 |
| autoUpload |
Boolean |
true |
是否自动上传 |
| enableFileSizeCheck |
Boolean |
false |
是否开启文件大小校验 |
| maxFileSizeMB |
Number |
10 |
单文件最大大小(MB) |
| enableVideoDurationCheck |
Boolean |
false |
是否开启视频时长校验 |
| maxVideoDuration |
Number |
60 |
视频最大时长(秒) |
| enableCompressImage |
Boolean |
false |
是否开启图片压缩 |
| compressQuality |
Number |
80 |
压缩质量(0~100) |
| compressThresholdMB |
Number |
0 |
图片超过该大小才压缩;0 表示开启后始终压缩 |
| compressWidth |
Number |
0 |
压缩宽度,0 表示不限制 |
| compressHeight |
Number |
0 |
压缩高度,0 表示不限制 |
事件
| 事件名 |
回调参数 |
说明 |
| update:modelValue |
(list) |
v-model 同步 |
| change |
(list) |
资源列表变化 |
| selected |
(list) |
选择资源完成(未自动上传时常用) |
| uploaded |
({ item, raw }) |
单个资源上传成功 |
| upload-error |
({ item, error }) |
单个资源上传失败 |
| remove |
({ index, item }) |
删除资源 |
| validate-fail |
({ message, type, size, duration, file }) |
文件校验失败 |
modelValue 数据结构
组件输出的列表项示例:
{
id: "1710000000000_ab12cd",
type: "image", // image | video
url: "https://cdn.xxx.com/a.jpg", // 自动上传成功后为服务端地址;否则为本地临时地址
size: 123456, // 字节
duration: 0, // 秒,视频时有值
uploading: false
}
说明
- 自动上传时,会尝试从响应中解析以下字段作为最终地址:
data.path、data.url、path、url。
- 若你的后端返回结构不同,建议监听
uploaded 事件后按业务自行转换。
- 组件样式采用资源卡片网格,可直接用于小程序端。