element中的el-upload附件上传与附件回显

目录
  • 1、上传
  • 2、附件回显

开发中经常也会遇到附件的上传和回显,最方便的就是我们封装一个公共组件在页面中引用

1、上传

在src里面新建一个文件夹

<template>
  <el-upload class="upload-demo"
             multiple
             :limit="limit"
             :accept="accept"
             :headers="headers"
             :file-list="fileList"
             :action="uploadImgUrl"
             :on-exceed="handleExceed"
             :on-remove="handleRemove"
             :on-success="handleSuccess"
             :before-upload="beforeUpload"
             :on-error="handleUploadError">
    <!-- :on-preview="handlePreview" -->
    <el-button size="small"
               type="primary">点击上传</el-button>
    <div slot="tip"
         class="el-upload__tip"
         style="color:#909399">
      支持上传{{ accept === "*" ? "所有" : accept }}文件,且不超过20MB,附件名称不能超过50字
    </div>
  </el-upload>
</template>
<script>
import { getToken } from '@/utils/auth'
export default {
  components: {},
  props: {
    value: {
      type: String,
      default: null
    },
    accept: {
      type: String,
      default: '*'
    },
    limit: {
      type: Number,
      default: 1
    }
  },
  data () {
    return {
      uploadImgUrl: process.env.VUE_APP_BASE_API + '/common/upload', // 上传的图片服务器地址
      headers: {
        Authorization: 'Bearer ' + getToken()
      },
      fileList: [],
      returnData: []
    }
  },
  watch: {},
  mounted () {
    this.value === null && this.value === '' ? (this.fileList = []) : this.getFileList()
  },
  methods: {
    getFileList () {
      if (this.value !== null && this.value !== '') {
        const accessory = JSON.parse(this.value)
        this.fileList = []
        accessory.map(val => {
          this.fileList.push({
            name: val.name,
            // 编辑修改
            // response: {
            //   fileName: val.url
            // },
            response: {
              data: {
                fileName: val.url
              }
            }
          })
        })
      }
    },
    // 删除上传文件后
    handleRemove (file, fileList) {
      this.getReturnData(fileList)
    },
    // 上传前------------文件大小和格式校验
    beforeUpload (file) {
      if (this.accept !== '*') {
        var fileType = file.name.substring(file.name.lastIndexOf('.') + 1)
        const accept = this.accept.split(',')
        if (accept.indexOf('.' + fileType) < 0) {
          this.$message.warning('请选择正确的文件格式')
          return false
        }
      }
      const isLt50M = file.size / 1024 / 1024 < 20
      if (!isLt50M) {
        this.$message.warning('上传附件大小不能超过 20MB!')
        return false
      }
      return true
    },
    // 附件上传成功后的钩子
    handleSuccess (response, file, fileList) {
      if (response.code === 200) {
        this.getReturnData(fileList)
      } else {
        this.$message.error(response.msg)
        this.fileList=[]
      }
    },
    handleUploadError () {
      this.$message({
        type: 'error',
        message: '上传失败'
      })
    },
    // 获取附件信息后进行返回处理
    getReturnData (fileList) {
      this.returnData = []
      console.log(fileList)
      fileList.map(val => {
        this.returnData.push({
          name: val.name,
          url: val.response.data.fileName
        })
      })
      this.$emit('input', JSON.stringify(this.returnData))
    },
    // 点击上传文件的钩子
    handlePreview (file) {
      var a = document.createElement('a', '_bank')
      var event = new MouseEvent('click')
      a.download = file.name
      a.href = file.response.url
      a.dispatchEvent(event)
    },
    // 文件超出个数限制时的钩子
    handleExceed (files, fileList) {
      this.$message.warning(`当前限制只能上传 ` + this.limit + ` 个文件`)
    },
    // 删除文件之前的钩子,参数为上传的文件和文件列表,若返回 false 或者返回 Promise 且被 reject,则停止删除。
    beforeRemove (file, fileList) {
      return this.$confirm(`确定移除 ${file.name}?`)
    }
  }
}
</script>

代码中这个import { getToken } from ‘@/utils/auth’,其实是获取的存在Cookies里面的token的值,大家可以根据自己项目情况进行修改使用

在页面中直接引入使用就可以了:

2、附件回显

和上传一样同样新建一个文件夹

<template>
  <div class="upload-detail">
    <div class="detail"
         style="line-height:20px"
         v-if="accessory === '[]' || accessory === null">无</div>
    <div v-else>
      <template v-for="(val,key) in upload.fileList">
        <el-link :key="key"
                 class="detail"
                 :underline="false"
                 @click="handlePreview(val)">{{val.name}}
          <span class="icon-emad- icon-emad-xiazai"> 下载</span>
        </el-link>
      </template>
    </div>
  </div>
</template>
<script>
export default {
  data () {
    return {
      upload: {
        // 上传的地址
        url: process.env.VUE_APP_BASE_API + "/common/upload",
        // 上传的文件列表
        fileList: []
      }
    }
  },
  props: {
    accessory: {
      type: String,
      default: '[]'
    }
  },
  created () {
    this.getInfo(this.accessory)
  },
  methods: {
    getInfo (accessory) {
      this.upload.fileList = []
      if (accessory !== '[]' || accessory !== null) {
        let list = JSON.parse(accessory)
        list.map(val => {
          this.upload.fileList.push({
            name: val.name,
            url:process.env.VUE_APP_BASE_API + val.url
          })
        })
      }
    },
    // 点击上传----------------文件下载
    handlePreview (file) {
      var a = document.createElement('a');
      var event = new MouseEvent('click');
      a.download = file.name;
      a.href = file.url;
      a.dispatchEvent(event);
    }
  }
};
</script>
<style lang="scss"   scoped>
::v-deep .el-upload-list {
  height: auto;
  overflow: hidden;
}
.detail {
  line-height: 20px;
  display: block;
  .icon-emad- {
    color: rgba(98, 173, 255, 1);
  }
}
</style>

页面中引入使用:

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Vue实现附件上传功能

    本文实例为大家分享了Vue实现附件上传的具体代码,供大家参考,具体内容如下 前言 前端 UI 是用的是 element-ui 的上传功能 本文主要记录下代码,方便下次复制粘贴 前端部分 HTML limit: 限制文件个数 1 个 on-remove: 移除附件时的钩子函数,主要就 console 输出下 on-error: 用于处理上传异常后的处理,本人这主要用来关闭弹窗和全屏等待 file-list: 绑定附件 auto-upload: 禁止自动上传,true 的话选了文件就自动上传 htt

  • Element el-upload上传组件使用详解

    目录 基本用法 上传文件数量 上传格式及大小限制 上传过程中的各种钩子 显示已上传文件列表 上传时提交数据 选取和上传分开处理 upload上传是前端开发很常用的一个功能,在Vue开发中常用的Element组件库也提供了非常好用的upload组件. 基本用法 代码: <el-upload :action="uploadActionUrl"> <el-button size="small" type="primary">点击

  • Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)

    最近有使用vue+elementUI实现多图片上传的需求,遂做此纪录. 本次主要写一下前端的实现细节,至于后台以Multipart[ ]数组接收即可,不再赘述,网上一搜大把文章可供参考. 本次使用elementui的上传图片控件的照片墙类型,其使用示例可具体查看官方文档 Elementui 多图上传控件 需要注意的是,官方文档中的示例采用自动上传的方式,大多数情况我们是需要点击上传按钮或和表单一起提交才开始上传的(即手动上传),此时官方的示例就不满足我们的需求了.怎么办?当然是自己动手丰衣足食啦

  • Java中多媒体文件上传及页面回显的操作代码

    文件上传页面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&

  • 基于SpringBoot实现图片上传及图片回显

    目录 数据库脚本 框架搭建 pom.xml 依赖 配置文件 实体类 DAO Service 文件上传 添加页面 控制器 列表页面 运行测试问题 全局异常处理 1. @ControllerAdvice + @ExceptionHandler 2. @Configuration+SimpleMappingExceptionResolver 图片回显 1. 回顾保存方式 2. 配置资源映射 案例:图书管理(SpringBoot+Thymeleaf+SpringData-JPA) 添加图书:图书基本信息

  • vant的Uploader 文件上传,图片数据回显问题

    目录 vant的Uploader文件上传,图片数据回显 需求 分析 使用 使用有赞Vant上传控件Uploader感悟 数据处理 后台处理 vant的Uploader文件上传,图片数据回显 需求 描述一下:点击上传证件照,选取需要的图片文件,然后图片在证件照栏展示 分析 看着挺简单的,用的是vant,里面有个文件上传的组件Uploader,它里面的文件预览模式是这样的 啊这... 指定不行,还好它还有自定义上传样式的,像这样 问题又来了:选取文件后没反应了!!! 其实也不是,没有反应就是没有对文

  • element中的el-upload附件上传与附件回显

    目录 1.上传 2.附件回显 开发中经常也会遇到附件的上传和回显,最方便的就是我们封装一个公共组件在页面中引用 1.上传 在src里面新建一个文件夹 <template> <el-upload class="upload-demo" multiple :limit="limit" :accept="accept" :headers="headers" :file-list="fileList&quo

  • element UI upload组件上传附件格式限制方法

    如下所示: <el-upload :action="uploadUrl" ref="upload" :multiple="false" :on-change="fileChange" :before-upload="beforeUpload" :on-success="handleAvatarSuccess" :on-preview="file_click" c

  • 解读element el-upload上传的附件名称不显示 file-list赋值

    目录 element el-upload上传的附件名称不显示 file-list赋值 问题 解决 el-upload上传附件-总结 FormData是什么? 使用步骤 element el-upload上传的附件名称不显示 file-list赋值 问题 上传附件后 文件名字不显示 解决 1.首先看file-list 是否在data中定义 2.如果定义了,文件名字还是不显示,在获取数据之后,把文件名字push到fileList中去,给name值赋值就可以显示了. this.fileList.pus

  • Java 中HttpURLConnection附件上传的实例详解

    Java 中HttpURLConnection附件上传的实例详解 整合了一个自己写的采用Http做附件上传的工具,分享一下! 示例代码: /** * 以Http协议传输文件 * * @author mingxue.zhang@163.com * */ public class HttpPostUtil { private final static char[] MULTIPART_CHARS = "-_1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJK

  • ant design中upload组件上传大文件,显示进度条进度的实例

    Upload组件是自带上传进度,但是样式调起来很麻烦,我们要做的就是自定义一个 首先页面要引入组件 Upload, Progress uploadAttachmentsProps = { action: `/api/upload`, showUploadList: false, // 这里关闭自带的列表 beforeUpload: (info) => { /* 上传前的钩子,可以用来判断类型,和大小 if ('是否符合类型') { return false } if ('是否符合类型') { r

  • vue中多附件上传的实现示例

    前言 本篇主要记录在 Vue项目中 实现附件上传功能,可实现单/多附件上传,识别文件格式并用不同图标展示功能,及控制是否可编辑功能.内容简洁易懂,如有需要可自取. 完整代码点击这里click 核心代码 <div class="upload-flie-btn"> <div class="btn-tips" @click="openFileSelect" v-show="editFlag">上传附件<

  • react中antd Upload手动上传的示例

    目录 情况介绍 实现方法 1.初始化 2.上传表单和图片 3.图片回显 情况介绍 在antd官方提供的upload组件案例中,都使用了action属性直接上传,唯一手动上传的一个例子(如下图)也不够好用,可能不能满足项目的需求,所以我们需要对其进行一些修改,并加入一些别的方法. 我们经常会使用antd的form表单上传数据,有时就会需要同时上传图片.所以在这里我们需要实现的是,前端页面上传多张图片时,先存储在前端,当表单上传时,和表单数据一起上传到后端. 实现方法 1.初始化 首先,在最前面引入

随机推荐