Skip to content

Upload 上传组件

该组件用于上传文件场景

温馨提示

本项目参考了 uView-Plus 开源项目的组件开发方式,基于 Vue 3 和 TypeScript 实现了自定义组件。目前该组件仍处于测试阶段。
感谢 uView-Plus 开源项目及其团队成员的贡献,他们的组件开发思路为本项目提供了宝贵地参考。如果需要了解更多组件开发细节,可以参考uView-Plus的 upload组件 的代码实现。

平台差异说明

APP(vue)H5微信小程序

基本使用示例

html
<!-- 全局使用 -->
<hy-upload :fileList="list"></hy-upload>
<!-- 单个组件引入 -->
<HyUpload :fileList="list"></HyUpload>
ts
import { HyUpload } from "hy-app"

上传图片模拟状态

html
<template>
    <hy-upload :fileList="list"></hy-upload>
</template>
ts

import { FileVo } from "hy-app";
import { ref } from "vue";

const list = ref<FileVo[]>([
    {
        status: "success",
        message: "上传中",
        url: "https://img0.baidu.com/it/u=3196617431,1263013381&fm=253"
    }
]);

const afterRead = (event: any) => {
    let lists = event.file;
    let a = 0;
    list.value.push({
        status: "loading",
        message: "上传中",
        url: lists[0].url,
        schedule: a
    });
    const timer = setInterval(() => {
        a += 10;
        list.value[0].schedule = a;
    }, 200);
    setTimeout(() => {
        clearInterval(timer);
        list.value = [
            {
                status: "success",
                message: "上传成功",
                url: lists[0].url,
                schedule: 50
            }
        ];
    }, 3000);
}

上传多张图片

html
<hy-upload :fileList="list_1" @afterRead="afterRead_1" multiple></hy-upload>
ts

import { FileVo } from "hy-app";
import { ref } from "vue";

const list = ref<FileVo[]>([]);

const afterRead = (event: any) => {
    let lists = event.file;
    lists.forEach((item) => {
        let a = 0;
        list_1.value.push({
            status: "loading",
            message: "上传中",
            url: item.url,
            schedule: a,
        });
        const index = list_1.value.findIndex((v) => v.url === item.url);
        const timer = setInterval(() => {
            a += 10;
            list_1.value[index].schedule = a;
        }, 300);
        setTimeout(() => {
            clearInterval(timer);
            list_1.value[index] = {
                status: "success",
                message: "上传成功",
                url: item.url,
                schedule: a,
            };
        }, 3000);
    });
}

API

参数说明类型默认值
fileList显示已上传的文件列表array
accept接受的文件类型,file只支持H5(只有微信小程序才支持把accept配置为all、media)all | media | image | file | videoimage
capture图片或视频拾取模式,当accept为image类型时设置capture可选额外camera可以直接调起摄像头string | Array<'album'|'camera'>['album', 'camera']
compressed当accept为video时生效,是否压缩视频,默认为truebooleantrue
camera当accept为video时生效,可选值为back或frontback | frontback
maxDuration当accept为video时生效,拍摄视频最长拍摄时间,单位秒number60
uploadIcon上传区域的图标,只能内置图标stringIconConfig.
uploadIconColor上传区域的图标的颜色string#D3D4D6
useBeforeRead是否启用(显示/隐藏)组件booleanfalse
previewFullImage是否预览图片booleantrue
maxCount最大选择图片的数量number52
disabled是否启用(显示/隐藏)组件booleanfalse
imageMode预览上传的图片时的裁剪模式,和image组件mode属性一致stringaspectFill
name标识符,可以在回调函数的第二项参数中获取stringfile
sizeTypeoriginal 原图,compressed 压缩图,默认二者都有,H5无效Array<'original' | 'compressed'>['original', 'compressed']
multiple是否开启图片多选,部分安卓机型不支持booleanfalse
deletable是否显示删除图片的按钮booleantrue
maxSize选择单个文件的最大大小,单位B(byte),默认不限制numberNumber.MAX_VALUE
uploadText上传区域的提示文字string-
width内部预览图片区域和选择图片按钮的区域宽度,单位rpx,不能是百分比,或者autostring | number80
height内部预览图片区域和选择图片按钮的区域高度,单位rpx,不能是百分比,或者autostring | number80
previewImage是否在上传完成后展示预览图booleantrue
autoDelete自动删除无需手动@delete处理booleanfalse
autoUpload自动上传无需@afterRead中处理booleanfalse
autoUploadApi自动上传的接口string-
autoUploadDriver自动上传驱动stringlocal
autoUploadAuthUrl自动上传OSS模式下,授权接口string-
autoUploadHeader自动上传模式下,携带的额外header,一般为比如Authorization等。object-
getVideoThumb视频上传后是否获取封面图booleanfalse

fileList

参数说明类型默认值
url上传文件本地地址链接string-
type上传文件类型image|video|file-
thumb上传文件本地地址链接string-
size文件大小number-
isVideo是否视频boolean-
isImage是否图片boolean-
deletable是否显示删除按钮boolean-
status上传时候状态loading|failed|success-
message提示信息string-
schedule进度条string | number-

Events

事件名说明回调参数
afterRead读取后的处理函数(file, lists, name),错误信息
beforeRead读取前的处理函数(file, lists, name),错误信息
oversize图片大小超出最大允许大小(file, lists, name), name为通过props传递的index参数
clickPreview全屏预览图片时触发(url, lists, name),url为当前选中的图片地址,index为通过props传递的index参数
delete删除图片传递index 回调 event 参数 包含index,file

Slots

插槽名说明接收值
default--
trigger--
00:46