特效介绍
vue3分片上传插件,支持单文件上传,多文件上传;当为多文件时,会批量进行上传;显示文件列表,显示每个文件的上传进度;支持因暂停上传或网络问题导致的上传中断的断点续传。
上传完成后,点击确定按钮,会将所有上传文件的上传信息emit到外部。
使用方法
安装
// 安装element-plus,如果已安装,忽略 npm install element-plus --save // 安装 spark-md5 npm install --save spark-md5 // 安装本插件 npm install hxz-chunk-upload --save
全局使用element-plus
import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' app.use(ElementPlus)
使用本插件
/
/ 引入本插件 import { hxzChunkUpload } from "hxz-chunk-upload" // 在components中加入本插件 components: {hxzChunkUpload}, // 在template中加入本插件 <hxz-chunk-upload />
参数
参数名 | 默认值 | 类型 | 解释 |
---|---|---|---|
action | '' | String | 上传接口地址 |
appedData | null | Object | 上传接口额外参数 |
folderName | '' | String | 目录名 |
headers | null | Object | header携带参数 |
maxSize | 1000 | Number | 单个文件最大尺寸(MB) |
shardSize | 1000 | Number | 分片大小(KB) |
height | 150 | Number | 拖拽区域的高度 |
tableHeight | '500px' | String | 文件列表的表格高度 |
multiple | true | Boolean | 是否多文件上传 |
accept | '*' | String | 文件类型 |
name | 'file' | String | 上传的文件字段名 |
disabled | false | Boolean | 是否禁用 |
上传接口参数
参数名 | 类型 | 解释 |
---|---|---|
folderName | String | 目录名 |
fileData | binary | 分片二进制数据 |
fileName | String | 文件名 |
file_size | Number | 文件大小(字节) |
file_chunksize | Number | 分片大小(字节) |
file_suffix | String | 后缀名 |
fileTotal | Number | 总分片数 |
fileMd5 | String | 文件MD5,凭借这个合并文件 |
fileIndex | Number | 1--非最后一个分片 2--最后一个分片 |
上传接口应按照如下返回
{ "status": 200, "message": "success", "data": { "id": "", // 文件ID,当合并分片后,返回 "message": "", // 提示信息 "url": "", // 文件url,当合并分片后,返回 "file_index": 1, // 分片索引 "status": 1 // 1--非最后一个分片,2--最后一个分片(合并分片后返回2) } }
事件
事件名 | 事件参数 | 参数类型 | 解释 |
---|---|---|---|
closeUpload | null | 取消按钮的点击事件 | |
confirmUpload | uploadedInfoList | array | 确定按钮的点击事件,参数格式:[{"id": "", "url": "", "file_index": 10, "status": 2 }] |
使用示例
<template> <hxz-chunk-upload ref="hxz-chunk-upload" action="/api/tool/oss/upload3" @confirmUpload="confirmUpload" /> <!-- :multiple="false" --> </template> <script> import { hxzChunkUpload } from "hxz-chunk-upload" import 'hxz-chunk-upload/dist/yxChunkNext.css' export default { name: 'App', components: {hxzChunkUpload}, data () { return { } }, methods: { confirmUpload(info) { console.log(info) } }, mounted() { } } </script> <style> body,html{ margin: 0; padding: 0; box-sizing: border-box; } body{ padding: 30px; } </style>