Skip to content

Upload 上传 ​

uvx-upload 提供图片、视频与文件的选择入口、列表预览和删除操作。文件上传由使用方在 afterRead 中执行,并通过 fileList 回传状态。

平台兼容性 ​

AndroidiOS鸿蒙H5微信
√√√√√

平台能力 ​

能力AndroidiOS鸿蒙H5微信
图片选择、预览与删除√√√√√
视频选择与预览√√√√√
file、all 文件选择×××√√
media 图片与视频混选××××√

使用须知

  1. 组件只选择文件,不向服务器上传。afterRead 返回的文件对象以 url 保存临时路径,调用方必须维护 fileList。
  2. multiple=false 时 afterRead.file 是单个文件;multiple=true 时是数组。视频选择器每次只返回一个视频。
  3. useBeforeRead=true 时必须调用 beforeRead 事件的 callback(true) 才会继续读取。beforeRead 函数可返回 false 阻止读取,或返回文件替换选择结果;也可返回 Promise。
  4. 任一文件超过 maxSize 时,整批文件只触发 oversize,不触发 afterRead。
  5. file/all 仅 H5 与微信小程序可选,media 仅微信小程序可选;其他平台会触发 error。文件、媒体选择能力还取决于宿主和基础库版本。
  6. 删除事件只通知调用方,不会直接修改 fileList。预览视频会打开组件内弹层;关闭弹层后停止播放。

基础用法 ​

vue
<template>
   <uvx-upload
      :file-list="files"
      multiple
      :max-count="9"
      @afterRead="handleAfterRead"
      @delete="handleDelete"
   ></uvx-upload>
</template>

<script lang="uts" setup>
import type { UploadFile, UploadReadEvent, UploadDeleteEvent } from "@/uni_modules/uvx-ui/components/uvx-upload/types/index.uts";

const files = ref<UploadFile[]>([]);

const handleAfterRead = (event: UploadReadEvent): void => {
   const selected: UploadFile[] = Array.isArray(event.file) ? event.file : [event.file];
   files.value = files.value.concat(selected);
};

const handleDelete = (event: UploadDeleteEvent): void => {
   files.value = files.value.filter((item: UploadFile, index: number): boolean => index != event.index);
};
</script>

实际上传时,在 handleAfterRead 中读取 file.url 并调用业务接口;上传状态通过 status、message 回填列表。

视频选择 ​

vue
<uvx-upload
   :file-list="videos"
   accept="video"
   :max-duration="60"
   :preview-full-video="true"
   @afterRead="handleAfterRead"
></uvx-upload>

视频缩略块点击后显示弹层播放器。preview-full-video=false 时只触发 clickPreview。

数量与尺寸 ​

vue
<uvx-upload
   :file-list="files"
   :max-count="2"
   :max-size="2 * 1024 * 1024"
   :width="100"
   :height="100"
   @oversize="handleOversize"
></uvx-upload>

列表达到 max-count 后隐藏选择入口;超大文件通过 oversize 通知使用方。

读取前确认 ​

vue
<uvx-upload
   :file-list="files"
   :use-before-read="true"
   @beforeRead="handleBeforeRead"
   @afterRead="handleAfterRead"
></uvx-upload>

beforeRead 事件包含 callback(accepted: boolean);异步检查完成后调用 callback(true) 放行,调用 callback(false) 拒绝。

自定义入口 ​

vue
<uvx-upload :file-list="files" :max-count="1" :width="120" :height="90">
   <image src="/static/upload-placeholder.png" class="upload-entry"></image>
</uvx-upload>

默认插槽替换选择按钮;插槽内容的尺寸由使用方设置。

API ​

Props ​

属性说明类型默认值平台
accept选择类型:image、video、file、all、mediastring"image"file/all 仅 H5、微信;media 仅微信
capture图片、视频来源:album、camera;字符串按逗号分隔string | string[]["album", "camera"]图片、视频平台
compressed视频选择是否压缩,取决于系统 APIbooleantrue视频平台
camera视频拍摄摄像头:back、frontstring"back"视频平台
max-duration最长拍摄秒数number60视频、微信媒体
upload-icon默认入口图标string"camera-fill"全部
upload-icon-color入口图标颜色;空值跟随图标主题string""全部
use-before-read启用 beforeRead 事件异步确认booleanfalse全部
before-read读取前可选回调;可返回布尔值、替换文件或相应 Promisefunction未设置全部
after-read文件通过校验后的可选回调(file, detail) => void未设置全部
preview-full-image点击时打开系统图片预览booleantrue全部
preview-full-video点击时打开视频弹层booleantrue全部
max-count文件总数上限;达到后隐藏入口string | number52全部
disabled禁止选择文件booleanfalse全部
image-mode缩略图裁剪模式Mode"aspectFill"全部
name事件中的列表标识string""全部
size-type图片尺寸类型string[]["original", "compressed"]图片平台
multiple图片、文件、媒体是否多选booleanfalse对应选择器
deletable默认显示删除按钮;为 false 时单项可设为 truebooleantrue全部
max-size单个文件大小上限,字节string | numberNumber.MAX_VALUE全部
file-list受控文件列表UploadFile[][]全部
upload-text默认入口文字string""全部
width缩略块与默认入口宽度string | number80全部
height缩略块与默认入口高度string | number80全部
preview-image是否显示已选文件缩略块booleantrue全部
u-style根节点自定义样式字符串string""全部
u-class根节点外部类名string""全部

FileList Options ​

字段说明类型默认值平台
url文件路径,必填string无全部
thumb缩略图路径;空值使用 urlstring无全部
size文件大小,字节number无全部
name文件名string无文件选择
typeimage、video 或 file,也可为系统返回类型string无全部
statusuploading、failed、successstring无全部
message状态文字string无全部
deletable组件关闭删除按钮时,单项设为 true 仍可显示boolean无全部

Events ​

事件说明参数平台
error选择失败或类型不受支持message: string全部
beforeRead异步读取确认{ file, name, index, callback }全部
oversize文件超过大小限制{ file, name, index }全部
afterRead文件通过检查{ file, name, index }全部
delete请求删除文件{ file, name, index }全部
clickPreview点击缩略块{ file, name, index }全部

Slots ​

插槽说明平台
默认插槽替换默认选择入口内容全部

参考 ​

uvx-ui · uni-app x 组件库