0.1.7 • Published 6 years ago

vue-drop-upload v0.1.7

Weekly downloads
17
License
MIT
Repository
github
Last release
6 years ago

vue-drop-upload

基于vue的批量上传组件,支持上传文件、文件夹。支持拖拽上传

安装

npm install vue-drop-upload

功能介绍

  • 按钮点击上传文件、文件夹;
  • 拖拽上传文件、文件夹;
  • 多文件上传;
  • 支持大文件分片;
  • 支持自动上传;
  • 自定义请求头;
  • 自定义请求参数;
  • 自定义过滤上传文件名;
  • 支持配置一次上传最大数量(仅限最外层文件、文件夹);
  • 支持单文件最大上传限制(单位:KB);
  • 可定义不能上传文件夹、只支持文件夹等...
  • 可定义最外层只支持上传文件夹;
  • 详细的错误提示机制;

示例

vue-drop-upload示例

vue-drop-upload示例

使用

init

import Vue from 'vue'
import uploader from 'vue-drop-upload'
import App from './App.vue'

Vue.use(uploader)

new Vue({
  render(createElement) {
    return createElement(App)
  }
}).$mount('#app')

App.vue

<template>
  <upload
    :multiple="uploadOptions.multiple"
    :action="uploadOptions.action"
    :drag="uploadOptions.drag"
    :upload-folder="uploadOptions.uploadFolder"
    :params="uploadOptions.params"
    :onerror="uploadOptions.error"
    ref="upload"
    >
    <i slot="icon">上传图标</i>
    <button type="button" name="file-button" class="upload-default" slot="file">上传文件</button>
    <button type="button" name="folder-button" class="upload-default" slot="folder">上传文件夹</button>
    <button type="button" name="button" class="upload-default" slot="submit">上传至服务器</button>
    <div class="tip-default" slot="tip">
      支持上传文件、文件夹
    </div>
  </upload>
</template>
<script>
  export default {
    data () {
      uploadOptions: {
        multiple: true,
        action: '',
        drag: true,
        uploadFolder: true,
        params: {},
        onerror: this.onerror
      }
    },
    methods: {
      onerror (err) {

      }
    }
  }
</script>

slots

   所有slot都有默认值,都可不传

slot="icon" 拖拽监听框中的图标slot

slot="file" 选择文件按钮slot,有默认class:upload-default

slot="folder" 选择文件夹按钮slot,有默认class:upload-default

slot="submit" 上传按钮slot,有默认class:upload-default

slot="tip" 补充文字说明,有默认class:tip-default

props

proptypedescriptiondefault
actionString必选参数,上传的地址——
headersObject自定义请求头——
paramsObject自定义请求参数——
multipleBoolean是否支持多文件上传(只对上传文件的按钮有效)false
dragBoolean是否支持拖拽上传false
onlyDragBoolean是否只支持拖拽上传false
isShowUploadListBoolean是否显示上传列表true
acceptString支持的文件上传格式(只对上传文件的按钮有效)——
uploadFolderBoolean是否支持上传文件夹false
limitRootCountNumber最外层文件、文件夹支持的一次性上传个数100
allowRootRepeateBoolean是否允许最外层文件、文件夹名称重复上传true
rootOnlyNeedFolderBoolean最外层是否只支持上传文件夹false
maxSizeNumber单文件上传大小限制(单位:B)——
isPerPieceBoolean是否对大文件进行分片false
pieceLimitNumber分片大小限制(单位:KB)5242880
fileNameFiltersArray需要过滤的文件名集合——
autoUploadBoolean是否选择后自动提交false
uploadingAllowUploadBoolean正在上传中时是否支持选择、拖拽上传true
allowChangeRootNameBoolean是否支持更改最外层文件、文件夹名称true
onlyNeedUploadOneRootBoolean是否只允许上传一个最外层文件、文件夹(二次选择会覆盖前次选择的文件、文件夹)false
allowDeleteRootBoolean是否允许删除文件、文件夹(上传列表是否显示删除按钮)true
showFileSizeBoolean是否显示已经上传的文件大小/总文件大小true
withCredentialsBoolean跨域时是否发送cookiefalse
onerrorFunction错误信息回调——
uploadStartFunction开始上传回调——
uploadEndFunction上传结束回调——
fileSelectedFunction点击选择文件按钮,选择后的回调,参数为选择的文件——
folderSelectedFunction点击选择夹文件按钮,选择后的回调,参数为选择的文件夹中的文件列表——
dropedFunction拖拽后文件、文件夹解析完毕后的回调,参数为解析后的拖拽问价、文件夹(形式为目录树对象)——
deleteRootFunction删除一个根文件、文件夹的回调,参数:删除文件的index, 删除的文件解析对象,next回调(需要在执行完毕业务程序后调用该回调,执行删除,若不调用next则不执行删除文件、文件夹)null
uploadOneFileFunction上传完成一个文件的回调,参数:{ file, response }; file(上传文件的相关信息),response(后端返回的参数信息)——
changeRootNameFunction更改最外层文件、文件夹名称回调——

实例方法

调用方式:this.$refs.upload.submit()
名称用途注意事项
submit提交所选择的文件、文件夹——
abort取消上传,终止正在发送的请求——
clear清空上传列表正在上传中不会操作,并发送一个code:9 的error
setOriginalData设置上传列表数据传入参数必须为Array,一项列表数据表示一个最外层文件、文件夹

关于setOriginalData方法的参数举例:

[
  {
    name: '文件夹1', // 文件夹名称
    type: 'folder', // 文件夹类型(默认)
  },
  {
    name: '文件1', // 文件夹名称
    type: 'file', // 文件类型
  }
]

获取全部的上传数据

调用方式:this.$refs.upload.originalData
| 该数据包含上传列表中的所有数据,树状对象描述的目录树结构。

errorMap (重要)

项目中所有的异常操作都会调用error回调,参数:
{
  code: 0, // 根据code确定错误类型
  message: '', // 错误提示文案
  data: {} // error对象,主要用于httpError
}
codetypedescription
1typeError反应不支持上传文件夹
2httpErrorajax请求onerror捕获的错误
3responseErrorCode请求成功,但后端返回status不是100
4limitRootCountError外层文件、文件夹超过限制的数量
5rootOnlyFolderError外层只支持上传文件夹,却上传了文件
6maxSizeError但文件大于最大限制
7emptyUpload上传文件为空
8emptyFolderSelect选择了空文件夹
9uploadingNotClear正在上传中执行了clear
10uploadingNotAllowUpload正在上传中不允许选择、拖拽文件
11rootNameRepeat最外层文件、文件夹名称重复
12callbackError调用回调函数过程中捕捉到的错误

外附说明

分片实现,当上传第一个分片时,后端需要回传uploadId参数,作为后续分片的uploadId参数的值,以此来区分多个分片是属于同一文件。

由于我自己公司项目,返回状态码200时,同时需要response.status === 100才为请求成功,因此在代码中有依赖于这一个条件,思考良久没有想到方法可以将这个拆分出去。如有建议可以信息我~~~有需要用到此项目的小伙伴,可自行copy稍作更改即可。

0.1.7

6 years ago

0.1.6

6 years ago

0.1.5

6 years ago

0.1.4

6 years ago

0.1.3

6 years ago

0.1.2

6 years ago

0.1.1

6 years ago

0.1.0

6 years ago

0.0.32

6 years ago

0.0.31

6 years ago

0.0.30

6 years ago

0.0.29

6 years ago

0.0.28

6 years ago

0.0.27

6 years ago

0.0.26

6 years ago

0.0.25

6 years ago

0.0.24

6 years ago

0.0.23

6 years ago

0.0.22

6 years ago

0.0.21

6 years ago

0.0.20

6 years ago

0.0.19

6 years ago

0.0.18

6 years ago

0.0.17

6 years ago

0.0.16

6 years ago

0.0.15

6 years ago

0.0.14

6 years ago

0.0.13

6 years ago

0.0.12

6 years ago

0.0.11

6 years ago

0.0.10

6 years ago

0.0.9

6 years ago

0.0.8

6 years ago

0.0.7

6 years ago

0.0.6

6 years ago

0.0.5

6 years ago

0.0.4

6 years ago

0.0.3

6 years ago

0.0.2

6 years ago

0.0.1

6 years ago