## Upload 组件 > 1.3.0 新增 `Upload` 上传组件。 **注:** 本文中所有的原始文件对象统称为**原始文件**,而经过包装后的文件对象称为**文件对象**,这个文件对象的结构如下: | 属性 | 说明 | 类型 | | - | - | - | | name | 文件名 | String | | size | 文件大小 | Number | | url | 文件 url,通过 URL.createObjectURL 获得 | String | | base64 | 文件 base64 的值,这个会从原始文件的 base64 属性获得(默认是没有的,但是插件可以添加,例如下边演示的压缩 compress 插件就会添加 base64 值)| String | | status | 文件状态,包含四个: ready, uploading, success, error | String | | progress | 文件上传进度,小数 0~1 | Number | | file | 原始文件 | File | | response | 响应内容(自动转 JSON) | Object/Array/String | | responseHeaders | 响应头 | String | ### 示例 - 基本用法 ```html ``` ```js export default { methods: { filesAdded(files) { const maxSize = 1 * 1024 * 1024 // 1M for (let k in files) { const file = files[k] if (file.size > maxSize) { file.ignore = true } } } } } ``` 配置 `action` 表示上传的 URL 地址,而 `simultaneous-uploads` 则表示支持的并发上传个数。 通过 `files-added` 事件可以实现文件过滤,设置 `file.ignore = true` 即可。 - 压缩图片且通过 Base64 上传 ```html ``` ```js import compress from '../modules/image' export default { data() { return { action2: { target: '//jsonplaceholder.typicode.com/photos/', prop: 'base64Value' } } }, methods: { processFile(file, next) { compress(file, { compress: { width: 1600, height: 1600, quality: 0.5 } }, next) }, fileSubmitted(file) { file.base64Value = file.file.base64 } } } ``` `action` 中除了有 `target` 目标上传地址外;还有 `prop` 配置,表示上传的时候采用处理后的 `file` 普通对象的哪个属性所对应的值上传,这里设置的就是 `base64Value` 的值。 `process-file` 则是一个函数,主要用于处理原生文件的,调用 `next` 回调的话,参数是处理完的文件对象,这里示例的就是调用 `compress` 做压缩,处理完后会回调 `next`。 `file-submitted` 事件则是每个文件处理完后添加到 `upload` 实例的 `files` 数组中后触发,参数就是一个处理后的文件对象。 ### Props 配置 | 参数 | 说明 | 类型 | 默认值 | 示例 | | - | - | - | - | - | | action | 上传行为配置项,最少包含上传目标的 URL 地址 | String/Object | '' | { target: '/upload' } | | max | 最大上传文件个数 | Number | 10 | - | | auto | 是否自动上传,即选择完文件后自动开始上传 | Boolean | true | - | | simultaneousUploads | 并发上传数 | Number | 1 | - | | processFile | 处理原始文件函数 | Function | function (file, next) { next(file) } | - | * `action` 子配置项 如果 `action` 是字符串,则会被处理成 `{ target: action }` 这样结构。 | 参数 | 说明 | 类型 | 默认值 | | - | - | - | - | | target | 上传目标 URL | String | - | | fileName | 上传文件时文件的参数名 | String | 'file' | | prop | 上传的时候使用文件对象的 prop 属性所对应的值 | String | 'file' | | headers | 自定义请求头 | Object | {} | | data | 上传需要附加数据 | Object | {} | | withCredentials | 标准的 CORS 请求是不会带上 cookie 的,如果想要带的话需要设置 withCredentials 为 true | Boolean | false | | timeout | 请求超时时间 | Number | 0 | | | progressInterval | 进度回调间隔(单位:ms) | Number | 100 | | checkSuccess | 校验是否成功函数,参数为服务端响应数据,返回值为 true 则代表成功 | Function | function (res) { return true } | * `processFile` 子配置项 一个函数,这个函数有两个参数:`(file, next)`,`file` 就是原始文件,`next` 为处理完毕后的回调函数,调用的时候需要传入处理后的文件。 ### 事件 | 事件名 | 说明 | 参数 | | - | - | - | | files-added | 选择完文件后触发,一般可用作文件过滤 | 原始文件列表 | | file-submitted | 每个文件处理完后添加到 `upload` 实例的 `files` 数组中后触发 | 文件对象 | | file-removed | 文件被删除后触发 | 文件对象 | | file-success | 文件上传成功后触发 | 文件对象 | | file-error | 文件上传失败后触发 | 文件对象 | | file-click | 文件点击后触发 | 文件对象 | ### 实例方法 | 方法名 | 说明 | 参数 | | - | - | - | | start | 开始上传 | - | | pause | 暂停上传 | - | | retry | 重试上传 | - | | removeFile | 删除文件 | 文件对象 |