Vue 附件上传示例

  • 前言
  • 前端部分
    • HTML
    • JS
    • 工具类 JS
    • API
  • 后端接口

前言

前端 UI 是用的是 element-ui 的上传功能

本文主要记录下代码,方便下次复制粘贴

前端部分

HTML

  • limit: 限制文件个数 1 个
  • on-remove: 移除附件时的钩子函数,主要就 console 输出下
  • on-error: 用于处理上传异常后的处理,本人这主要用来关闭弹窗和全屏等待
  • file-list: 绑定附件
  • auto-upload: 禁止自动上传,true 的话选了文件就自动上传
  • http-request: 自定义上传文件请求方法,默认方法会与 mock 产生 XmlRequest 重新生成导致找不到文件问题,我注释了 mock 还是那样,没具体研究
  • action: 原上传文件的路径,由于使用了自定义上传文件请求,即 http-request,因此这个字段随便写就好,不写不行好像
<el-uploadref="upload":limit="fileLimit":on-remove="handleRemove":on-error="onError":file-list="fileList":auto-upload="false":http-request="uploadFile"action="https://jsonplaceholder.typicode.com/posts/"class="upload-demo"><el-button slot="trigger" size="small" type="primary">选取文件</el-button><!-- <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button> --><div slot="tip" class="el-upload__tip">支持上传 {{ strRebuild(fileType) }} 格式,且不超过 {{ fileSize }}M</div>
</el-upload>

JS

import { strRebuild, lastSubstring } from '@/utils/strUtil'
import { message } from '@/utils/message'export default {data() {return {// 附件列表fileList: [],// 允许的文件类型fileType: ['xls', 'xlsx', 'pdf', 'doc', 'docx', 'txt', 'jpg', 'png', 'jpeg'],// 运行上传文件大小,单位 MfileSize: 10,// 附件数量限制fileLimit: 1,}},methods: {// 清空表单clear() {// 清空附件this.$refs.upload.clearFiles()},// 附件检查// 检查附件是否属于可上传类型// 检查附件是否超过限制大小checkFile() {var flag = truevar tip = ''var files = this.$refs.upload.uploadFilesfiles.forEach(item => {// 文件过大if (this.size !== null && this.size !== '' && item.size > this.fileSize * 1024 * 1024) {flag = falsetip = ' 文件超过' + this.fileSize + 'M'}// 文件类型不属于可上传的类型if (this.fileType !== null && this.fileType !== '' && !this.fileType.includes(lastSubstring(item.name, '.'))) {flag = falsetip = ' 文件类型不可上传'}})if (!flag) {message('error', tip)}return flag},// 提交附件submitUpload() {if (this.checkFile()) {console.log('上传附件...')this.$refs.upload.submit()} else {console.log('取消上传')}},// 自定义文件上传方法uploadFile(file) {// 把文件放入 FormData 进行提交const param = new FormData()param.append('files', file.file)uploadFile(param).then(response => {// TODO 一些关闭弹框,上传成功提示等})},// 移除附件handleRemove(file, fileList) {console.log('移除附件...')},// 附件上传失败,打印下失败原因onError(err) {message('error', '附件上传失败')console.log(err)},// 字符串重组strRebuild(str) {return strRebuild(str)}}
}

工具类 JS

strUtil.js

// 字符串相关工具类
// 数组根据分隔符重组为字符串
export function strRebuild(arr, split) {if (arr === undefined || arr === null || !(arr instanceof Array) || arr.length === 0) {return ''}if (split === undefined || split === null) {split = ','}var str = ''arr.forEach((v, i) => {if (i === arr.length - 1) {str = str + v} else {str = str + v + split}})return str
}// 截取最后一个特定字符后面的字符串
export function lastSubstring(str, split) {if (str === undefined || str === null || split === undefined || split === null) {return ''}return str.substring(str.lastIndexOf(split) + 1)
}

message.js

import { Message } from 'element-ui'// 提示封装 type 提示类型, msg 提示信息,duration 持续时间
export function message(type, msg, duration) {Message({message: msg || 'success',type: type || 'success',duration: duration || 5 * 1000})
}// 带删除键提示,duration 为 0 时,不会自动消失
// 提示封装 type 提示类型, msg 提示信息,duration 持续时间
export function messageShowClose(type, msg, duration) {Message({message: msg || 'success',type: type || 'success',duration: duration || 0,showClose: true})
}

API

// 附件上传
export function uploadFile(file) {return request({url: '/uploadFile',method: 'post',headers: {'Content-Type': 'multipart/form-data; charset=utf-8'},data: file})
}

后端接口

/*** 单文件上传* @param files 接收文件要以数组接收* @return*/
@PostMapping(value="/uploadFile")
public void uploadFile(@RequestBody MultipartFile[] files) {// TODO
}

Vue 实现附件上传相关推荐

  1. vue使用upload上传附件

    vue使用upload上传附件 这里的上传附件包括视频,图片,等各种格式 效果图 文章目录 vue使用upload上传附件 这里的上传附件包括视频,图片,等各种格式 效果图 ![在这里插入图片描述]( ...

  2. 基于ruoyi+vue+elementUI实现列表,新增,附件上传,tab+springBoot+mybatis+oracle序列+批量新增

    基于ruoyi+vue+elementUI实现列表,新增,附件上传,tab+springBoot+mybatis+oracle序列+批量新增 页面效果 列表页面 新增页面 详情页面 代码实现 列表+新 ...

  3. WangEditor增加附件上传功能

    WangEditor增加附件上传功能 WangEditor富文本官方地址 // 上传附件功能 // 第一,菜单 class ,Button 菜单继承 BtnMenu classclass FileMe ...

  4. 附件上传在IE中的问题

    附件上传在IE中的问题 问题描述:自定义的文件上传input:file在IE浏览器上进行附件上传时,input:file 的onchange事件失效. 原因分析: input:file 控件的onch ...

  5. element 附件上传/文件上传组件

    实例: 组件代码: <template><div><el-uploadclass="upload-demo"action="":a ...

  6. discuz 删除系统自带的附件上传

    由于使用了DBank的论坛附件程序,所以想去掉系统自带的附件上传程序,后台不能设置,研究了下,找到一下方法: 1.  template\default\forum\editor_menu_forum. ...

  7. java多附件上传 实例demo

    java多附件上传 实例demo <%@ page language="java" import="java.util.*" pageEncoding=& ...

  8. 使用DOM方法实现多附件上传客户端

    有时候需要传多个附件,再次我用javascript的dom方式实现了次功能,很实用的. 功能呢就是用户可以添加多个附件,每次点击 添加 添加一个新的上传文本域,对于已经添加的上传文本域,用户可以 点击 ...

  9. vue项目如何放到服务器上,Vue项目怎么上传到云服务器

    Vue项目怎么上传到云服务器 内容精选 换一换 本章节以Linux操作系统为例,指导您通过弹性云服务器内网方式连接GaussDB(for Redis)实例.使用内网连接GaussDB(for Redi ...

最新文章

  1. Android_View_得到Activity
  2. k-means算法的理解与实现
  3. 如何分析案件的性质_律师如何综合分析一个案件
  4. python3爬虫实例-python3爬虫实例(采集淘宝商品数据)
  5. VC++套接字、数据库、文件读写综合应用-客户端读取文件套接字接收服务端写入数据库
  6. 20211130 正定矩阵的几个不等式
  7. 没有足够的值_元丰通宝值多少钱吗?市场价值如何?有没有足够的收藏空间?...
  8. linux安装外部软件,科学网—Madagascar 软件安装方法(Ubuntu下,适用于其他Linux系统) - 罗飞的博文...
  9. 通过jQuery获取Select选中的值或文本
  10. 图书馆占座系统(三)
  11. mmsegmentation自定义数据集
  12. Matlab如何平移图形(Figure)中的曲线
  13. pyqt5 点击开始按钮,执行事件,中途点击暂停按钮后,所执行的事件暂停
  14. 月入3万多的程序员回老家, 被亲戚说不如县城卖手机月入2千的表弟
  15. 【情暖寒冬 让爱同行】中创算力开展“寒冬送温暖”公益活动
  16. Mysql集群高可用之mha
  17. 使用zxing 解析图片中的二维码
  18. 视频聊天网站的技术与发展
  19. 2020百度大数据竞赛-Top3 故事分享(开源连接)新手入门
  20. MySQL - 学习/实践 - 多多翻阅补充

热门文章

  1. Xadmin文档(二)
  2. User’s Guide
  3. 2019牛客多校 第七场 B Irreducible Polynomial 多项式因式分解判断
  4. PADS-电阻、电容、电感CAE封装
  5. 狂肝半个月-嵌入式开发学习学习路线+知识汇总
  6. Fidder快速上手使用
  7. 使用VMware测试U盘启动盘是否制作成功
  8. Junit测试常用注解
  9. 什么是冷备份和热备份
  10. 拒绝成为肉鸡 教你几招让黑客永远抓不到你