做者:一粒尘土 时间:2019-3-17 注:如下操做针对 vue-cli
$ npm i element-ui -S
import ElementUI from 'element-ui' // 引入element import 'element-ui/lib/theme-chalk/index.css' // 引入css样式 Vue.use(ElementUI) // 中间件全局注册
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
action | 必选参数,上传的地址 | string | - | - |
multiple | 是否支持多选文件 | boolean | - | - |
data | 上传时附带的额外参数 | object | - | - |
accept | 接受上传的文件类型 | string | - | - |
on-preview | 点击文件列表中已上传的文件时的钩子 | function(file) | - | - |
on-remove | 文件列表移除文件时的钩子 | function(file, fileList) | - | - |
on-success | 文件上传成功时的钩子 | function(response, file, fileList) | - | - |
on-error | 文件上传失败时的钩子 | function(err, file, fileList) | - | - |
on-progress | 文件上传时的钩子 | function(event, file, fileList) | - | - |
on-change | 文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用 | function(file, fileList) | - | - |
before-upload | 上传文件以前的钩子,参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则中止上传 | function(file) | - | - |
before-remove | 删除文件以前的钩子,参数为上传的文件和文件列表,若返回 false 或者返回 Promise 且被 reject,则中止上传 | function(file, fileList) | - | - |
auto-upload | 是否在选取文件后当即进行上传 | boolean | - | true |
file-list | 上传的文件列表, 例如: [{name: 'food.jpg', url: 'https://xxx.cdn.com/xxx.jpg'}] | array | - | [] |
limit | 最大容许上传个数 | number | - | - |
参数 | 说明 | 参数 |
---|---|---|
clearFiles | 清空已上传的文件列表(该方法不支持在 before-upload 中调用) | - |
在进行文件上传时,由于须要的不一样,因此可分为 即时上传,延时上传 两种状况css
即时上传:选中文件以后当即上传html
说明:文件上传时action属性为文件上传的地地址,若是上传文件时须要携带参数,可放在data属性中(对象格式)vue
<el-upload class="upload-demo" ref="upload" action="/System/fileUpload.mvc" // 上传文件的地址 :on-change="getFiles" // 文件改变时调用的钩子函数 multiple // 是否支持上传多条文件 :data="addFilesDate" // 上传文件时携带的参数 :file-list="fileList"> // 上文文件的列表 <el-button size="small" type="primary">选择文件</el-button> </el-upload>
延时上传:可用于表单操做时传递文件,在表单信息保存完毕后上传文件操做vue-cli
说明:延时上传须要依靠auto-upload属性来设置文件是否即时上传,默认值为 true,若是设置为false时,选择文件以后不会上传文件,咱们可在须要上传文件时调用以下方法便可上传文件npm
$ this.$refs.upload.submit() // 上传文件操做
<el-upload class="upload-demo" ref="upload" action="/System/fileUpload.mvc" :on-change="getFiles" multiple :data="addFilesDate" :file-list="fileList" :auto-upload="false""> <el-button size="small" type="primary">选择文件</el-button> </el-upload>
在上传文件附件的时候,由于需求不一样,因此对于文件格式的限制也有所不一样,在这里可使用accept(接收文件类型),可是仅仅使用该属性并不能彻底限制用户的选择,此时咱们能够结合 before-upload函数来进行限制,如此便可真正的限制文件上传时的格式限制element-ui
<el-upload class="upload-demo" ref="upload" action="/System/fileUpload.mvc" :on-change="getFiles" :before-upload="beforeUpload" // 文件上传前的回调 multiple :accept=".doc, .docx, .xls, .xlsx" // 接收的文件类型 :data="addFilesDate" :file-list="fileList"> <el-button size="small" type="primary">选择文件</el-button>
添加:我在这里写了个方法,能够在before-upload函数中调用 this.fileUploadSuffix(fileList, suffix),来判断用户选择的问价是不是符合后缀的,代码以下数组
/** * 文件上传 限制格式 * @param fileList 文件列表( 数组) * @param suffix 文件格式限制(字符串)".doc, .docx, .wps" * @param blooean 返回值 */ Vue.prototype.fileUploadSuffix = function (fileList, suffix) { let blooean = null for (let i in fileList) { let item = fileList[i] // 某一条文件信息 let fileName = item.name.lastIndexOf('.') // 取到文件名开始到最后一个点的长度 let fileNameLength = item.name.length // 取到文件名长度 let hz = item.name.substring(fileName + 1, fileNameLength) // 获取上传文件的后缀名 // 判断文件名后缀是否合法 if (suffix.indexOf(hz) === -1) { // 不合法上传文件 // 删除上传的文件列表中的不合法文件类型 fileList.splice(i--, 1) // 删除列表中的数据(删除后文件调整) // 弹窗显示判断 blooean = true } } return blooean // 返回参数 }
根据element文档可知,储存文件上传的属性为 fileList ,咱们只需将接受的参数,按照fileList的name属性附上值,便可回显咱们须要的格式,固然咱们也能够添加替他属性,用来进行下载删除等操做微信
属性值 | 参数 |
---|---|
name | 文件名称 |
url | 文件上传的路径 |
在element的 upload 组件中有一个属性可以让咱们用来进行文件的下载 on-preview(点击文件列表中已上传的文件时的钩子),而后在该函数中调用window.open(url) 方法 url 下载文件的地址mvc
在页面回显以后,也会有删除文件的操做,此时咱们可使用该组件中的 on-remove(文件列表移除文件的操做)属性 ,再调用该参数的时候文件列表中的数据将会被删除,这种效果并非很好,由此咱们可使用 before-remove 来进行删除文件的操做,若是用户选择肯定删除时,咱们再去调用删除文件的接口,在删除成功以后,咱们在进行页面上列表的屋里删除,就行了函数
<!--html代码--> <el-upload :befor-remove="beforRemove" ></el-upload> <!--js代码--> beforeRemove (file, fileList) { this.$alert(`肯定移除该文件?`, '提示', { confirmButtonText: '肯定', cancelButtonText: '取消', type: 'warning' }).then(() => { this.deleteFile(file, fileList) }).catch(() => { this.$message({ type: 'info', message: '取消删除操做' }) }) return false }, deleteFile (file, fileList) { let file = file let fileList = fileList // 接收文件 this.post(() => { url: '', // 删除文件的接口 data: {} // 传递的参数 }, (res) => { // 删除成功,更新页面中的文件列表信息 }) }
欢迎你们关注个人微信公众号,一块儿学习一块儿进步
代码小书生