更新记录

1.4.1(2024-04-08)

修复已知问题

1.4.0(2023-07-04)

新增unicloud启用目录选项

1.3.9(2023-06-28)

修复属性选择器警告提示

查看更多

平台兼容性

Vue2 Vue3
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 3.5.3 × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序
× × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari

cl-upload 上传组件

支持手动自动上传,样式调整,参数配置,预览,删除等功能

注意:每次上传都需要回调函数接收参数并且添加到与组件绑定的数组中以保持数据一致,这样做是因为组件不知道服务端返回的数据格式,也可以在组件中修改promise格式 一劳永逸

注意事项

  1. ratio 图片比例属性部分手机不支持,可选用height属性代替
  2. 自定义播放按钮部分平台有兼容性问题,可选择性关闭
  3. 开启压缩图片返回的临时路径没有尾缀,官方api的问题。真机上没问题,也可以在上传的时候手动添加尾缀
  4. 视频地址必须https, http可能导致无法显示封面图
  5. 如果没条件用https那就配置cloudType: other

H5体验地址

image

list数据格式

  1. 数组格式
    ['地址1','地址2']
  2. JSON格式
    [
    {
        path: '地址1.png',
        // 其他信息
    },
    {
        path: '地址2.mp4',
        poster: '自定义封面.png'
        // 其他信息
    },
    {
        path: '地址3.mp4',
        poster: require('../../static/c1.png'), // 封面也可以是本地图片
        // 其他信息
    },
    ]

基础使用

<cl-upload v-model="list" action="请求地址" @onSuccess="onSuccess"></cl-upload>

methods: {
    /**
     * 自动上传返回的是一张图片信息
     * 手动上传返回的是已选中所有图片或者视频信息
     * */ 
    onSuccess(reslut) {
        // 把服务端返回的图片地址添加到list中与组件数据同步
        this.list.push(reslut.url)
    },
}

uniCloud上传

一句代码实现上传,就是这么简单

<cl-upload v-model="list" action="uniCloud"></cl-upload>

自定义样式

通过 listStyle 控制每行数量、比例、行间距、列间距等常用样式

<cl-upload v-model="list" :listStyle="{
    columns: 2,
    columnGap: '20rpx',
    rowGap:'20rpx',
    padding:'10rpx',
    height:'300rpx',
    radius:'20rpx'
}">
    <template v-slot:addImg>
        <view class="newAddImg">
            <view>+</view>
            <text >添加</text>
        </view>
    </template>
</cl-upload>

预览模式

关闭显示添加按钮和删除按钮

<cl-upload v-model="list" :add="false" :remove="false"></cl-upload>

手动上传

通过 autoUpload 关闭掉自动上传,提交的时候通过 refs 主动调用组件上传方法,返回本次提交成功服务器返回数据

<cl-upload 
    ref="upload2" 
    v-model="list2" 
    :autoUpload="false"></cl-upload>

<button @tap="submit">手动提交</button>

methods: {
    submit() {
        /**
         * 主动调用组件上传方法
         * */ 
        this.$refs.upload2.submit().then(reslut=>{
            console.log(reslut); // 本次提交成功服务器返回数据

            // 上传第三方服务器需要手动同步数据
            // 上传uniCloud则不需要
            const imgUrls = reslut.list.map(imgInfo=> imgInfo.url);
            this.list2 = [...this.list2, ...imgUrls]
        })
    },
}

配置删除前和上传前钩子

/ **
* 开启删除前钩子 useBeforeDelete
* 开启上传前钩子 useBeforeUpload
*/
<cl-upload v-model="list" 
    useBeforeDelete 
    useBeforeUpload
    @beforeDelete="beforeDelete"
    @beforeUpload="beforeUpload"></cl-upload>

methods: {
    /**
     * 删除前钩子
     * @param {Object} item 当前删除的图片或者视频信息
     * @param {Number} index 当前删除的图片或视频索引
     * @param {Function} next 调用此函数继续执行组件删除逻辑
     * */ 
    beforeDelete(item, index, next) {
        uni.showModal({
            title: '提示信息',
            content: '确定要删除这个文件嘛?',
            success: res => {
                if (res.confirm) {
                    // 模拟服务器接口
                    setTimeout(() => {
                        next();
                    }, 1000);
                }
            }
        });
    },
    /**
     * 上传前钩子
     * @param {Object} tempFile 当前上传文件信息
     * @param {Function} next 调用此函数继续执行组件上传逻辑
     * */
    beforeUpload(tempFile, next) {
        // 自己的上传逻辑
        // 如果不需要走组件的上传逻辑就不用调用next(), 但是上传完要同步到list
    }
}

API

参数 说明 类型 默认值 可选值
action 上传地址 String - uniCloud
cloudPathAsRealPath 启用目录, 仅unicloud阿里云支持1.4.0 HBuilderX 3.8.5 Boolean false true
cloudType 存储云类型(各个云服务截取封面方式不同。 other选项是video保底手段,部分平台有兼容性问题) String oss 阿里云:oss 七牛云:vframe 腾讯云:process 其他:other
headers 设置上传的请求头部 Object - -
data 上传时附带的额外参数 Object - -
fileName 标识符,即后端接口参数名 String file -
fileType 文件类型 String all 'image', 'video', 'all'
imageFormData 上传图片参数 Object - -
videoFromData 上传视频参数 Object - -
listStyle 列表样式 Object - -
isPreviewImage 是否开启预览图片 Boolean true false
remove 是否显示删除按钮 Boolean true false
add 是否添加按钮 Boolean true false
max 最多显示数量 Number 9 -
maxVideo 视频最大上传数量 Number 不限制 -
deleteTitle 删除提示弹窗标题 String 提示 -
deleteText 删除提示弹窗文案 String 您确认要删除吗? -
loadingText 加载文案 String 正在上传中... -
useBeforeDelete 是否开启删除前钩子 Boolean false true
useBeforeUpload 是否开启上传前钩子 Boolean false true
addImg 添加按钮图片 String - -
playImg 播放按钮图片 String - -
deleteImg 删除按钮图片 String - -
closeImg 关闭视频按钮图片 String - -

imageFormData

参数 说明 类型 默认值 可选值
count 最多可以选择的图片张数 number 9 -
sizeType original 原图,compressed 压缩图 array 默认二者都有 -
sourceType 相册或者相机 array ['camera ', 'album'] ['camera ', 'album']
compress 是否开启图片压缩 Boolean false true
quality 压缩质量 number 80 -
size 图片大小 number - 单位MB

videoFromData

参数 说明 类型 默认值 可选值
maxDuration 拍摄视频最长拍摄时间 number 60 最多60秒
camera 前摄像头后摄像头 array - -
compressed 是否压缩所选的视频源文件。 Boolean true -
sourceType 相册或者相机 array ['camera ', 'album'] ['camera ', 'album']
size 视频大小 number - 单位MB

listStyle

参数 说明 类型 默认值 可选值
columns 每行数量 number 4 -
columnGap 行间距 string '40rpx' -
rowGap 列间距 string '40rpx' -
padding 列表内边距 string '0 0rpx' -
ratio 图片比例 string '1/1' 低版本手机不支持,可以选择height属性
height 图片高度 string '140rpx' -
radius 图片圆角 string '6rpx' -

Events

事件名 说明 回调参数
onSuccess 上传成功 data: 服务器返回数据
onError 上传失败 error:错误信息
onImage 点击图片 item: 图片信息 index: 列表索引
onVideo 点击视频 item: 视频信息 index: 列表索引
上传进程 参数说明
onVideoMax 触发视频最大数量限制 maxVideo, fileLength
onImageSize 触发图片最大尺寸限制 图片信息
beforeDelete 删除前钩子 item: 文件信息 index:文件索引 next:继续执行删除逻辑
beforeUpload 上传前钩子 tempFile: 文件信息 next:继续执行删除逻辑

参数说明

事件名 说明
progress 上传进度百分比
totalBytesSent 已经上传的数据长度
totalBytesExpectedToSend 预期需要上传的数据总长度

遇到问题或者讨论 uniapp 加入QQ群 553291781

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问