### 组件使用:
*****
```
<uploadFile :visible.sync="visibleFile" :on-success="fileSuccess" />
```
### 文件上传至服务器处理
*****
`Api.xxx()`的请求头同样考虑添加 `responseType:'blob',// 流 形式`
```
// 导入上传
fileSuccess(data) {
const param = new FormData() // FormData 对象
param.append('file', data.raw) // 文件对象
// param.append('uploadTitle', name) // 其他参数
Api.xxx(param).then(res => {
this.visibleFile = false
console.log(res, res.type)
})
}
```
### uploadFile组件
*****
```
<template>
<ComDialog
width="450px"
:title="fileTitle"
:visible="visible"
@before-close="handleClose"
>
<template>
<slot />
<el-form
ref="fileForm"
:model="fileForm"
:rules="rules"
label-width="80px"
class="form-ruleForm"
>
<el-form-item label="选择文件" prop="name">
<el-input v-model="fileForm.name" placeholder="请选择" readonly />
<el-upload
ref="upload"
class="upload-demo"
:action="'#'"
:show-file-list="false"
:on-preview="handlePreview"
:on-remove="handleRemove"
:on-success="handleAvatarSuccess"
:on-change="handleChange"
:before-upload="beforeAvatarUpload"
:auto-upload="false"
>
<el-button slot="trigger" type="primary">选取文件</el-button>
</el-upload>
</el-form-item>
</el-form>
</template>
<template slot="footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
</template>
</ComDialog>
</template>
<script>
import ComDialog from '@/components/ComDialog'
export default {
name: 'UploadFile',
components: { ComDialog },
props: {
fileTitle: {
type: String,
default: '文件上传'
},
visible: {
type: Boolean,
default: false
},
onSuccess: {
type: Function,
default: null
}
},
data() {
return {
rules: {},
fileForm: {
name: ''
}
}
},
methods: {
handleChange(data) {
this.fileForm = { ...data }
},
handleRemove(file, fileList) {
console.log(file, fileList)
},
handlePreview(file) {
console.log(file)
},
handleClose() {
this.fileForm = {
name: ''
}
this.$emit('update:visible', false)
},
handleAvatarSuccess(data) {
console.log(data)
},
beforeAvatarUpload(data) {
console.log(data)
},
submitForm() {
if (this.onSuccess) {
this.onSuccess(this.fileForm)
} else {
this.$emit('callback', this.fileForm)
}
}
}
}
</script>
<style lang="scss" scoped>
::v-deep .el-form-item__content {
display: flex;
.el-button {
margin-left: 16px;
}
}
</style>
```
- 首页
- 2021年
- 基础知识
- 同源策略
- 跨域
- css
- less
- scss
- reset
- 超出文本显示省略号
- 默认滚动条
- 清除浮动
- line-height与vertical-align
- box-sizing
- 动画
- 布局
- JavaScript
- 设计模式
- 深浅拷贝
- 排序
- canvas
- 防抖节流
- 获取屏幕/可视区域宽高
- 正则
- 重绘重排
- rem换算
- 手写算法
- apply、call和bind原理与实现
- this的理解-普通函数、箭头函数
- node
- nodejs
- express
- koa
- egg
- 基于nodeJS的全栈项目
- 小程序
- 常见问题
- ec-canvas之横竖屏切换重绘
- 公众号后台基本配置
- 小程序发布协议更新
- 小程序引入iconfont字体
- Uni-app
- 环境搭建
- 项目搭建
- 数据库
- MySQL数据库安装
- 数据库图形化界面常用命令行
- cmd命令行操作数据库
- Redis安装
- APP
- 控制缩放meta
- GIT
- 常用命令
- vsCode
- 常用插件
- Ajax
- axios-services
- 文章
- 如何让代码更加优雅
- 虚拟滚动
- 网站收藏
- 防抖节流之定时器清除问题
- 号称破解全网会员的脚本
- 资料笔记
- 资料笔记2
- 公司面试题
- 服务器相关
- 前端自动化部署-jenkins
- nginx.conf配置
- https添加证书
- shell基本命令
- 微型ssh-deploy前端部署插件
- webpack
- 深入理解loader
- 深入理解plugin
- webpack注意事项
- vite和webpack区别
- React
- react+antd搭建
- Vue
- vue-cli
- vue.config.js
- 面板分割左右拖动
- vvmily-admin-template
- v-if与v-for那个优先级高?
- 下载excel
- 导入excel
- Echart-China-Map
- vue-xlsx(解析excel)
- 给elementUI的el-table添加骨架
- cdn引入配置
- Vue2.x之defineProperty应用
- 彻底弄懂diff算法的key作用
- 复制模板内容
- 表格操作按钮太多
- element常用组件二次封装
- Vue3.x
- Vue3快速上手(第一天)
- Vue3.x快速上手(第二天)
- Vue3.x快速上手(第三天)
- vue3+element-plus搭建项目
- vue3
- 脚手架
- vvmily-cli
- TS
- ts笔记
- common
- Date
- utils
- axios封装
- 2022年
- HTML
- CSS基础
- JavaScript 基础
- 前端框架Vue
- 计算机网络
- 浏览器相关
- 性能优化
- js手写代码
- 前端安全
- 前端算法
- 前端构建与编译
- 操作系统
- Node.js
- 一些开放问题、智力题