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

Vue文件上传实战指南

Vue上传文件 示例

  • 定义元素 使用原生标签 input
    • 设置文件上传监听事件
    • 代码主动触发上传文件操作
    • 获取到文件后调用api 上传

定义元素 使用原生标签 input

定义了ref 属性,方便引用;使用了v-show 属性默认不显示,定义了type 属性为file 表示上传文件;定义了id 属性 fileInput ; 定义了multiple 支持多选文件上传;定义了accept 属性 从而限制上传的文件类型,但此种方式不能完全避免,还必须加以js 逻辑判断拦截

<inputv-show="false"ref="uploadRef"type="file"id="fileInput"multipleaccept=".doc,.docx,.md,.txt" />

设置文件上传监听事件

  1. 先获取到元素 fileInput
  2. 对元素进行change事件监听
  3. 获取目标元素的event.target.files
  4. 对符合条件的文件扩展名进行匹配,判断,拦截不符合要求的文件,并提示
const fileInput = document.querySelector("#fileInput");fileInput.addEventListener("change", event => {const files = event.target.files;const allowedExtensions = ['md', 'doc', 'docx', 'txt'];const filteredFiles = Array.from(files).filter(file => {const ext = file.name.split('.').pop().toLowerCase();return allowedExtensions.includes(ext);});if (filteredFiles.length === 0) return this.$message.warning('只能上传.doc,.docx,.md,.txt类型的文件')else this.uploadFile(files)});

代码主动触发上传文件操作

1.清空文件对象的value

// 选择文件this.$refs.uploadRef.value = ''this.$refs.uploadRef.click()

获取到文件后调用api 上传

  1. FormData 文件上传
const formData = new FormData();
Array.from(files).forEach(file => {formData.append("files", file);});APIRequest.uploadRequest({projectId: this.row.id || 0,formData,}).then((res) => {if (res.code == 200) {this.$message.success('上传成功')this.fresh()} else {this.$message.error(res.message || `请求出错`)}})
http://www.xdnf.cn/news/15315.html

相关文章:

  • 【OpenGL 渲染器开发笔记】1 为什么要设计渲染器?
  • Dubbo-Admin 安装与使用指南:可视化管理 Dubbo 服务
  • 初识drag2框架,drag2注入的基本原理
  • 常用的docker命令备份
  • k8s:0/1 nodes are available: pod has unbound immediate PersistentVolumeClaims.
  • 论文Review 3DGSSLAM GauS-SLAM: Dense RGB-D SLAM with Gaussian Surfels
  • 使用python操作文件夹
  • Hashtable 与 HashMap 的区别笔记
  • [GWCTF 2019]我有一个数据库
  • 05.判断日期是工作日还是周末
  • 改进广告投入与销售额预测分析
  • JavaSE-多态
  • 从架构到代码:飞算JavaAI电商订单管理系统技术解构
  • [CH582M入门第六步]软件IIC驱动AHT10
  • 算法题(174):全排列问题
  • 归并排序递归法和非递归法的简单简单介绍
  • 运放压摆率?正弦波怎么输出了三角波?
  • 数据结构 单链表(2)--单链表的实现
  • 打破并发瓶颈:虚拟线程实现详解与传统线程模型的性能对比
  • 二叉树算法详解和C++代码示例
  • C++封装、多态、继承
  • RFCOMM协议详解:串口仿真与TCP/IP协议栈移植技术——面试高频考点与真题解析
  • 在Intel Mac的PyCharm中设置‘add bin folder to the path‘的解决方案
  • 【Scratch】从入门到放弃(六):指令大全-扩展类
  • iOS高级开发工程师面试——关于优化
  • 在AI应用中Prompt撰写重要却难掌握,‘理解模型与行业知识是关键’:提升迫在眉睫
  • 关于数据库的慢查询
  • C/C++数据结构之多维数组
  • MyBatis04-MyBatis小技巧
  • QT 多线程 管理串口