1.0.2 • Published 1 month ago

@tanzhenxing/zx-uploader v1.0.2

Weekly downloads
-
License
ISC
Repository
-
Last release
1 month ago

zx-uploader 文件上传组件

zx-uploader 是一个功能强大的文件上传组件,支持 H5、小程序和 APP 端。它提供了丰富的功能,如文件预览、上传状态显示、数量和大小限制、自定义样式等。

特性

  • 支持多端:H5、小程序、APP
  • 文件预览:支持图片和非图片文件预览
  • 上传状态:显示上传中、成功、失败等状态
  • 数量限制:可配置最大上传文件数量
  • 大小限制:可配置单个文件最大上传大小
  • 自定义样式:支持自定义上传按钮和预览区域
  • 事件回调:提供丰富的事件回调,如读取后、删除前、超限等
  • v-model 支持:可通过 v-model 双向绑定文件列表
  • 禁用与只读:支持禁用和只读状态

使用方法

<template>
  <view>
    <zx-uploader
      v-model="fileList"
      @after-read="handleAfterRead"
      @delete="handleDelete"
      :max-count="5"
      :max-size="1024 * 1024 * 2" 
    />
  </view>
</template>

<script setup>
import { ref } from 'vue';

const fileList = ref([]);

const handleAfterRead = (event) => {
  console.log('文件读取完成:', event.file);
  // 在这里处理文件上传逻辑
  // event.file 是一个包含文件信息的对象或数组
  // 例如:uni.uploadFile({...})
};

const handleDelete = (event) => {
  console.log('文件删除:', event.file, event.index);
  // fileList.value.splice(event.index, 1); // 如果未使用v-model,则需要手动删除
};
</script>

API

Props

参数说明类型默认值
v-model已上传的文件列表,元素为对象,至少包含 url 属性Array[]
disabled是否禁用文件上传Booleanfalse
readonly是否为只读状态,只展示文件列表,不允许上传和删除Booleanfalse
accept允许上传的文件类型, image video media all 或者自定义 MIME 类型Stringimage
capture图片和视频选取来源,可选值为 album (从相册选起)、camera (使用相机)String Array['album', 'camera']
multiple是否开启多选Booleanfalse
max-count最大允许上传个数Number StringInfinity
max-size单个文件最大大小,单位为 byteNumber StringInfinity
deletable是否展示删除按钮Booleantrue
show-upload是否展示上传区域Booleantrue
preview-size预览图和上传区域的大小,单位rpx或pxNumber String160rpx
preview-image是否在上传完成后展示预览图Booleantrue
image-fit预览图裁剪模式,同 uni-app 中 image 组件的 mode 属性StringaspectFill
upload-text上传区域文字提示String''
upload-icon上传区域图标名称 (基于 zx-icon)Stringphotograph
before-read文件读取前的回调函数,返回 false 可阻止读取,支持返回 PromiseFunction-
before-delete文件删除前的回调函数,返回 false 可阻止删除,支持返回 PromiseFunction-

File Object 结构

文件列表中的每个文件对象(v-model 或事件回调中)通常包含以下属性:

属性说明类型备注
url文件访问地址 (必须)String
status上传状态 (uploading, done, failed)String可选,用于控制显示状态
message上传状态提示信息String可选,配合 status 使用
name文件名 (可选,H5环境会自动从File对象获取)String
type文件类型 (可选,H5环境会自动从File对象获取)String
size文件大小 (可选,H5环境会自动从File对象获取)Number
isImage是否为图片文件 (可选,如果url不含后缀,可手动指定)Boolean
file原始文件对象 (可选,通常在 after-read 事件中包含)ObjectH5 为 File 对象, 小程序为 chooseFile 返回的对象
tempFilePath临时文件路径 (可选, 小程序和APP环境 after-read 事件中包含)String

Events

事件名说明回调参数
after-read文件读取完成时触发event: { file: FileObject | FileObject[], name?: string, index?: number }
delete删除文件时触发event: { file: FileObject, name?: string, index: number }
oversize文件大小超过限制时触发event: { file: FileObject | FileObject[], name?: string, index?: number }
click-preview点击预览图时触发event: { file: FileObject, name?: string, index: number }
click-upload点击上传区域时触发 (如果使用了默认slot)event: Event

Slots

名称说明
default自定义上传区域的内容
preview-cover自定义覆盖在预览图上方的内容,作用域插槽,参数为 { file, index }
preview-delete自定义删除按钮图标,作用域插槽,参数为 { file, index }

注意事项

  • 组件本身不包含将文件上传到服务器的逻辑,after-read 事件触发后,您需要自行调用 uni.uploadFile 或其他上传API将文件发送到服务器。
  • v-model 绑定的文件列表,其元素的 url 属性是必须的,用于展示预览图。
  • 在小程序和 App 端,after-read 返回的文件对象中会包含 tempFilePath,可用于 uni.uploadFile
  • H5 端,after-read 返回的文件对象中会包含原始的 File 对象,可以用于 FormData 上传。

TODO

  • 完善多端兼容性测试
  • 增加视频预览功能
  • 增加文件图标显示,用于非图片类型文件
  • 优化性能和体验