Skip to content

Upload 上传

用于文件/图片/视频的上传组件,支持多选、压缩、预览、自定义上传等功能。

  • 支持图片、视频、文件等多种类型上传
  • 支持多选和数量限制
  • 支持图片压缩
  • 支持自定义上传逻辑
  • 支持禁用、只读状态

注意

该组件在不同平台上的表现可能存在细微差异,请以实际效果为准。

平台差异说明

App(vue)App(nvue)H5小程序

基本使用

  • 通过 v-model 绑定文件列表,默认为空数组。
  • 通过 accept 设置接受的文件类型,默认为 image
html
<see-upload v-model="fileList" />

<script lang="ts" setup>
import { ref } from 'vue';
const fileList = ref([]);
</script>

多选上传

  • 通过设置 isMultipletrue 启用多选。
  • 通过 maxCount 设置最大文件数量,默认为 9
html
<see-upload v-model="fileList" isMultiple :maxCount="9" />

<script lang="ts" setup>
import { ref } from 'vue';
const fileList = ref([]);
</script>

文件大小限制

  • 通过 maxSize 设置单个文件大小限制,单位为 MB。
  • 超出限制时会触发 onOversize 事件。
html
<see-upload v-model="fileList" :maxSize="5" @on-oversize="handleOversize" />

<script lang="ts" setup>
import { ref } from 'vue';
const fileList = ref([]);

const handleOversize = (file) => {
  console.log('文件大小超出限制', file);
};
</script>

视频上传

  • accept 设置为 video 可上传视频文件。
  • 设置为 media 可同时支持图片和视频。
html
<see-upload v-model="fileList" accept="video" :maxCount="3" />

<script lang="ts" setup>
import { ref } from 'vue';
const fileList = ref([]);
</script>

自定义上传

  • 通过 upload 属性传入自定义上传函数,返回文件 URL。
  • 通过 beforeRead 在上传前进行校验。
  • 通过 afterRead 在上传后执行回调。
html
<see-upload
  v-model="fileList"
  :upload="customUpload"
  :before-read="beforeRead"
  :after-read="afterRead"
/>

<script lang="ts" setup>
import { ref } from 'vue';
const fileList = ref([]);

const customUpload = async (file) => {
  // 自定义上传逻辑,返回文件 URL
  const url = await uploadToServer(file);
  return url;
};

const beforeRead = (file) => {
  // 返回 false 阻止上传
  return file.size < 10 * 1024 * 1024;
};

const afterRead = (file) => {
  console.log('上传完成', file);
};
</script>

禁用和只读

  • 通过设置 isDisabledtrue 禁用上传。
  • 通过设置 isReadonlytrue 设置只读模式,可预览但不能增删。
html
<see-upload v-model="fileList" isDisabled />
<see-upload v-model="fileList" isReadonly />

图片压缩

  • 通过设置 isCompresstrue 启用图片压缩,默认开启。
  • 通过 compressQuality 设置压缩质量,范围 0-100,默认为 80
html
<see-upload v-model="fileList" isCompress :compressQuality="60" />

API

Props

参数名说明类型默认值可选值
modelValue文件列表UploadFileItem[][]-
accept接受的文件类型'image' | 'video' | 'file' | 'media''image'-
isMultiple是否支持多选booleanfalse-
maxCount最大文件数量number9-
maxSize单个文件大小限制(MB)number--
isDisabled是否禁用booleanfalse-
isReadonly是否只读booleanfalse-
isDeletable是否显示删除按钮booleantrue-
isPreview是否支持预览booleantrue-
isCompress是否压缩图片booleantrue-
compressQuality压缩质量 0-100number80-
upload自定义上传函数(file) => Promise<string>--
beforeRead上传前校验(file) => boolean | Promise<boolean>--
afterRead上传后回调(file) => void--
name表单字段名string''-
size尺寸'small' | 'default' | 'large''default'-
uploadText上传按钮文字string''-

UploadFileItem 类型

参数名说明类型
url文件地址string
name文件名string
size文件大小number
type文件类型string
status上传状态'uploading' | 'done' | 'error'
message状态提示信息string
progress上传进度 0-100number

Events

事件名说明回调参数
onChange文件列表变化时触发files: UploadFileItem[]
onOversize文件大小超出限制时触发file: UploadFileItem
onDelete删除文件时触发file: UploadFileItem, index: number
onPreview预览文件时触发file: UploadFileItem, index: number
onClickUpload点击上传按钮时触发event: Event
onError上传出错时触发error: Error

Slots

插槽名说明
default自定义上传区域内容
preview自定义预览内容
preview-delete自定义删除按钮内容

辽 ICP 备 2025070134 号