当前位置: 首页 > news >正文

【vue2+elementui】记录el-upload文件上传时调接口传参的几种情况

自动上传

el-upload上传文件调接口的时候默认会带有一个入参file: 原生的file对象

无额外入参

action属性指定了文件上传的接口地址
auto-upload属性:是否在选取文件后立即上传,默认值true
所以只要设置了这两属性,文件在选择后(或拖拽到上传区域后)会自动上传到 action 属性指定的地址,默认入参是file。

<div class="batch-import-contain"><el-button type="primary" size="mini">下载模板</el-button><el-uploadclass="upload-demo"dragaction="https://jsonplaceholder.typicode.com/posts/":auto-upload="true":accept="accept"><i class="el-icon-upload"></i><div class="el-upload__text"><p>点击或将文件拖拽到这里上传</p><p>支持扩展名:.xls .xlsx .csv .et .ett .xlt...</p></div></el-upload>
</div>
export default {name: 'batchImport',data() {return {accept: '.xls,.xlsx,.csv,.et,.ett,.xlt,.png',}},
}
有额外入参

但如果还有额外的入参,就要用到http-request属性:覆盖默认的上传行为,可以自定义上传的实现
action的值可以设置为#或其他占位符,因为实际请求会在http-request中处理

<div class="batch-import-contain"><el-button type="primary" size="mini">下载模板</el-button><el-uploadclass="upload-demo"dragaction="#":accept="accept":auto-upload="true":http-request="customUpload"><i class="el-icon-upload"></i><div class="el-upload__text"><p>点击或将文件拖拽到这里上传</p><p>支持扩展名:.xls .xlsx .csv .et .ett .xlt...</p></div></el-upload>
</div>
export default {name: 'batchImport',data() {return {accept: '.xls,.xlsx,.csv,.et,.ett,.xlt,.png',extraParams: {userId: 123,  token: 'your_token_here' },}},methods: {customUpload(params) {// params是一个对象,包含了file和fileList,// 但是这个params参数可能每个版本不一样值就不一样,到时候自己打印看看,// 反正file的值就是原始的File对象const formData = new FormData()formData.append('file', params.file)	// 这是file入参,文件信息// 如果extraParams是个对象,循环加入formDatafor (const key in this.extraParams) {  formData.append(key, this.extraParams[key]) } // 如果extraParams是个单独的值,直接加入formData.append('extraParams', 'someValue')	// 这是额外的入参,假设叫extraParams// 调接口接口地址(入参:formData).then(res => {// 上传成功}).catch(() => {// 上传失败})},},
}

手动上传

上面是选择文件后就自动调接口上传到服务器了,还有一种情况是:选择文件后,点击确定按钮或者其他什么操作才触发文件上传至服务器

无额外入参

auto-upload属性设置为false
action属性写明接口地址
在按钮点击事件中调用upload组件的submit方法手动触发上传

<div class="batch-import-contain"><el-button type="primary" size="mini">下载模板</el-button><el-uploadclass="upload-demo"ref="upload"dragaction="https://jsonplaceholder.typicode.com/posts/":auto-upload="false":accept="accept"><i class="el-icon-upload"></i><div class="el-upload__text"><p>点击或将文件拖拽到这里上传</p><p>支持扩展名:.xls .xlsx .csv .et .ett .xlt...</p></div></el-upload>
</div>
<span class="footer"><el-button type="primary" @click="handleSure" size="mini">确定</el-button>
</span>
export default {name: 'batchImport',data() {return {accept: '.xls,.xlsx,.csv,.et,.ett,.xlt,.png',}},methods: {handleSure() {this.$ref.upload.submit()		// 写完这个就会触发上传调接口了}	}
}
有额外入参
<div class="batch-import-contain"><el-button type="primary" size="mini">下载模板</el-button><el-uploadclass="upload-demo"ref="upload"dragaction="https://jsonplaceholder.typicode.com/posts/":auto-upload="false":accept="accept":file-list="fileList" :on-change="onchange"><i class="el-icon-upload"></i><div class="el-upload__text"><p>点击或将文件拖拽到这里上传</p><p>支持扩展名:.xls .xlsx .csv .et .ett .xlt...</p></div></el-upload>
</div>
<span class="footer"><el-button type="primary" @click="handleSure" size="mini">确定</el-button>
</span>
export default {name: 'batchImport',data() {return {accept: '.xls,.xlsx,.csv,.et,.ett,.xlt,.png',fileList: [],extraParams: {userId: 123,  token: 'your_token_here' },}},methods: {onchange(file, fileList) {this.fileList = fileList},handleSure() {if(!this.fileList.length) {// 没有文件的时候要提示下"请先上传文件"return }const formData = new FormData()// 因为按钮点击事件的参数没有file信息,所以入参file要从on-change事件得到的fileList里面取// 又因为要考虑有几个文件,万一是多选就有多个,入参写法就不一样this.fileList.forEach(item => {formData.append("file[]", file.raw)// 注意:某些版本的 Element UI 可能不直接提供 file.raw,可能需要调整  // 如果不是 file.raw,则可能需要通过其他方式获取到原始的 File 对象 })// 如果单个文件,就直接formData.append("file[]", this.fileList.raw)// 额外入参for (const key in this.extraParams) {  formData.append(key, this.extraParams[key]) } // 或者单个入参  formData.append("入参名", "入参值") // 调接口开始上传接口地址(入参: formData).then(res => {// 上传成功}).catch(() => {// 上传失败})},}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • python爬取某财富网
  • windows go grpc
  • 深入浅出大模型:LangChain详解——打造你的自定义Chain与异步API
  • 使用安卓手机安装Kali Linux
  • 基于微信小程序的高校大学生信息服务平台设计与实现
  • 未来不会使用 AI 的人真的会被淘汰吗?
  • iptables和firewalld的区别以及用法
  • 【Golang 面试 - 基础题】每日 5 题(七)
  • Python实战——轻松实现动态网页爬虫(附详细源码)
  • Python 如何创建和操作矩阵?
  • ffmpeg将视频转换成图片
  • 【全面介绍下Gitea,什么是Gitea?】
  • 敏捷产品经理实训:助力产品负责人掌握敏捷方法,提升产品开发效率
  • VB中如何操作数据库(使用ADO.NET连接和查询数据库)
  • 在VMware里面安装Linux安装教程
  • JavaScript-如何实现克隆(clone)函数
  • 77. Combinations
  • CentOS从零开始部署Nodejs项目
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Linux下的乱码问题
  • maya建模与骨骼动画快速实现人工鱼
  • Python利用正则抓取网页内容保存到本地
  • Python中eval与exec的使用及区别
  • 闭包--闭包之tab栏切换(四)
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 关于springcloud Gateway中的限流
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 如何解决微信端直接跳WAP端
  • 使用parted解决大于2T的磁盘分区
  • 听说你叫Java(二)–Servlet请求
  • 推荐一个React的管理后台框架
  • 微服务框架lagom
  • 我感觉这是史上最牛的防sql注入方法类
  • 写代码的正确姿势
  • 一、python与pycharm的安装
  • 译自由幺半群
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • ###C语言程序设计-----C语言学习(3)#
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • ( 10 )MySQL中的外键
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (+4)2.2UML建模图
  • (4)STL算法之比较
  • (7) cmake 编译C++程序(二)
  • (C#)获取字符编码的类
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (笔试题)合法字符串
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (计算机网络)物理层
  • (三)docker:Dockerfile构建容器运行jar包
  • (三)uboot源码分析
  • (三十)Flask之wtforms库【剖析源码上篇】