# FileUploader 文件上传

上传组件,支持裁剪。

# 属性

# options

  • 类型:{Object}
  • 说明:上传配置项
  • 默认值:见下方
{
  mode: 'box', // 视图模式 bar: 条形 box: 方框
  blockWidth: '120px', // 块宽度,mode 为 box 生效
  blockHeight: '120px', // 块高度,mode 为 box 生效
  btnText: '上传文件', // 按钮文字
  visible: true, // 是否显示上传组件
  showAdd: true, // 是否显示新增按钮
  showTips: false, // 是否显示上传相关提示
  showItems: true, // 是否显示上传列表
  multiple: true, // 是否允许多选
  fileLimit: 4, // 最大文件个数 设为 0 表示不检查个数
  fileBytes: 5 _ 1024 _ 1024, // 单文件最大允许大小,单位 Byte

  accepts: 'jpg,jpeg,png,webp', // 允许上传的文件格式
  mimeTypes: 'image/_', // 媒体类型,影响选择框中文件的显示,图片一般用 image/_,word 文件一般用 application/octet-stream
  filenameLength: 16, // 允许的文件名最大长度
  capture: '', // 捕获类型 camera:相机 camcorder:摄像机 microphone:录音

  action: '/file/upload', // 上传接口地址
  codeKey: 'code', // 上传接口返回成功码的 code 名
  successCode: 0, // 上传成功后的 code
  urlGet: () => '', // 必须实现此方法,返回上传成功后服务器的文件地址(url)
  urlFullGet: () => '', // 必须实现此方法,返回完整可访问的文件地址(urlFull)
  name: 'file', // 上传文件 name
  headers: {}, // 上传 header 头信息
  extraData: {}, // 上传附带的其他参数

  crop: false, // 是否启用裁剪
  cropRatio: 1, // 裁剪比例 auto:表示任意比例
  cropBoxResizable: true, // 裁剪框是否可以改变大小
  imageMinSize: false, // 允许上传的图片最小尺寸 [50,50], false 表示不校验
  chunked: false, // 是否启用分片上传
  chunkSize: 5 _ 1024 _ 1024 // 分片大小 Byte
}

# files-list

  • 类型:{Array}
  • 说明:初始文件列表,用于回显数据
  • 默认值:[] 格式如下
{
  url: {String}, // 文件路径
  name: {String} // 文件名
}

# disabled

  • 类型:{Boolean}
  • 说明:是否禁用上传
  • 默认值:false

# before-read

  • 类型:{Function}
  • 说明:上传文件之前的钩子
  • 默认值:() => true
  • 上传前校验,返回 true 表示校验通过,返回 false 表示校验失败。
  • 支持返回 Promise 对 file 对象进行自定义处理。注意:此处的 file 对象不是原生 File, 获取原生 File 对象使用 file.source.source
beforeRead(file) {
  return new Promise(resolve => {
    file.name = '修改后的名字'
    console.log('原生File:', file.source.source)
    resolve(file)
  })
}

# 方法

# getUploadedFiles

  • 参数:
  • 返回值:{Array}
  • 说明:获取已上传文件的列表
{
  name: {String}, // 名称
  size: {Number}, // 大小
  type: {String}, // 类型
  url: {String}, // 存储地址
  urlFull: {String} // 完整存储地址
}

# isInProgress

  • 参数:
  • 返回值:{Boolean}
  • 说明:当前上传是否正在进行中

# reset

  • 参数:
  • 返回值:
  • 说明:重置上传文件列表

# trigger

  • 参数:
  • 返回值:
  • 说明:主动触发上传选择框

# uploadBase64File

  • 参数:{String}
  • 返回值:
  • 说明:主动上传 base64 格式的图片

# uploadOriginFile

  • 参数:{File}
  • 返回值:
  • 说明:主动上传原生 File 对象

# 事件

# start

  • 说明:当文件上传开始时
  • 回调参数:{Object} file 上传的文件

# success

  • 说明:当文件上传成功时
  • 回调参数:
    • {Object} file 上传的文件
    • {Object} result 上传结果

# error

  • 说明:当文件上传失败时
  • 回调参数:
    • {Object} file 上传的文件
    • {Object} result 上传结果

# end

  • 说明:当文件上传结束时,无论成功还是失败
  • 回调参数:{Object} file 上传的文件

# delete

  • 说明:当文件被删除时
  • 回调参数:{Object} file 被删除的文件

# 插槽

# default

  • 说明:自定义上传按钮

# tip

  • 说明:自定义上传提示内容,可通过 slot-scope 注入配置参数
<file-uploader>
  <template slot="tip" slot-scope="{ opts }">
    <section>
      <h1>上传的各项参数为:</h1>
      <span>{{ opts.accepts }}</span>
      <span>{{ opts.capture }}</span>
      <span>{{ opts.action }}</span>
      <span>{{ opts.fileLimit }}</span>
      <span>{{ opts.fileBytes }}</span>
    </section>
  </template>
</file-uploader>

# 示例

<template>
  <div>
    <file-uploader ref="refUploader" :options="uploader.options" />
    <button style="margin-top: 20px;" @click="getFiles">获取上传的文件列表</button>
  </div>
</template>

<script>
  import { FileUploader } from '@fe/packages/components'

  export default {
    name: 'FileUploaderExample',
    components: {
      FileUploader
    },
    data() {
      return {
        uploader: {
          options: {
            fileLimit: 10,
            crop: true,
            cropRatio: 16 / 9,
            fileBytes: 10 * 1024 * 1024
          }
        }
      }
    },
    methods: {
      getFiles() {
        const files = this.$refs.refUploader.getUploadedFiles()
        console.log(files)
      }
    }
  }
</script>