vue文件上传

news2025/1/19 20:32:58

vue文件上传

前言

今天写一篇关于文件上传的文章,其实对于真正工作的人来说,这不是很难的事,但对于新手来说无疑是个新技术

实现功能如下图

根据上传文件类型显示对应文件类型,图片直接显示,当然图片特可以做对应类型显示出来
upload

下图红色可以删了,因为当时产品经理觉得不好看,换那种图片的,用蓝色的

图片链接

file

html

该功能是基于iview-ui 的Upload 上传
如果没下载提前安装到项目里
$ npm install view-design --save
具体请点开 快速上手 这个链接

参数说明

img
upload

<Form ref="form"  :label-width="100">
	<FormItem label="营业执照信息:">
        <div class="fileBox">
          <div v-for="(item,index) in fileList" :key="item.fileUrl">
            <Card class="cardBox">
                <div >
                  <div  class="mdclose" @click="deleteFile(index)"><Icon type="md-trash" size="30" style="color: #ed4014;"></Icon></div>
                  <div  class="file_eye" @click="fileLook(item.fileUrl)"><Icon type="md-eye" size="30" style="color: #19be6b;"></Icon></div>
                </div>
                <div style="text-align:center;height:140px;">
                    <img v-if="!['image/png', 'image/jpeg','image/jpg'].includes(item.fileType) " :src="item.iconType" width="80" height="80">
                    <img v-if="item.fileType == 'image/png' || item.fileType =='image/jpeg'|| item.fileType =='image/jpg' " :src="item.fileUrl" width="80" height="81">
                    <h4 class="title">{{item.fileName}}</h4>
                </div>
            </Card>
          </div>
          <div style="cursor: pointer;">
       		 <!-- ***上传路径在这里action*** -->
            <Upload action="/logistics-engine/shippingcompany/uploadFile" :headers="{Authorization: token}" :data="{id: ids?ids:''}"
              :before-upload="beforeUpload" :on-success="uploadSuccessess" :on-error="uploadError" :show-upload-list="false"
              accept=".xls,.xlsx,.jpg,.jpeg,.png,.pdf,.txt,.doc,.docx,.gif,.ppt,.pptx,.zip">
              <div class="uploadStyle">
                  <Icon type="md-add" size="52" style="color: #c5c8ce"></Icon>
              </div>
            </Upload>
          </div>
        </div>
      </FormItem>
 </Form>

js

import { getToken } from '@/libs/util' // token 
data() {
    return {
    	  form: {
	        code: '', // 公司代码
	        token: '', // Token
	        publicAttachments: null, // 营业执照
	      },
		  token: getToken(),// token 看你们上传是不是需不需要了
	      ids: '',
	      fileList: [], // 上传文件信息集合
	      attachmentIconPath: {
	        'default': require('@/assets/uploadFIle/fileUpload-file.png'),
	        pdf: require('@/assets/uploadFIle/fileUpload-pdf.png'),
	        txt: require('@/assets/uploadFIle/fileUpload-txt.png'),
	        zip: require('@/assets/uploadFIle/fileUpload-zip.png'),
	        doc: require('@/assets/uploadFIle/fileUpload-doc.png'),
	        docx: require('@/assets/uploadFIle/fileUpload-docx.png'),
	        ppt: require('@/assets/uploadFIle/fileUpload-ppt.png'),
	        pptx: require('@/assets/uploadFIle/fileUpload-pptx.png'),
	        xls: require('@/assets/uploadFIle/fileUpload-xls.png'),
	        xlsx: require('@/assets/uploadFIle/fileUpload-xlsx.png'),
	        jpg: require('@/assets/uploadFIle/fileUpload-jpg.png'),
	        png: require('@/assets/uploadFIle/fileUpload-png.png'),
	        gif: require('@/assets/uploadFIle/fileUpload-gif.png'),
	        jpeg: require('@/assets/uploadFIle/fileUpload-jpeg.png')
	      }
    }
},
methods: {
	fileLook(val) { // 预览文件 url 图片是预览,文件是下载
      window.open(`${val}`)
    },
    deleteFile(idx) { // 删除文件
    	// 删除接口调用
      shippingCompaniesOpt.deletePublicAttachment(this.fileList[idx].id).then(res => {
        if (res.data.success) {
          this.$Message.info('删除成功')
          this.fileList.splice(idx, 1) // 删除成功之后把当前哪一张删除就OK了
          this.form.publicAttachments = this.fileList
        } else {
          this.$Message.error(('删除失败:') + err.data.errorMsg || err.message || '服务端-500')
        }
      }).catch(err => {
        this.$Message.error('删除失败:' + err.data.message)
      })
    },
	beforeUpload(file) { // 上传之前的逻辑处理
      if (this.fileList.length >= 3) { // 限制最多上传三张
        this.$Message.error('最多支持上传三张')
        return false
      }
      const fileExt = file.name.split('.').pop().toLocaleLowerCase()
      if (['xlsx', 'xls', 'jpg', 'png', 'pdf', 'jpeg', 'txt', 'doc', 'docx', 'gif', 'ppt', 'pptx', 'zip'].includes(fileExt)) {
        console.log('上传文件信息成功')
      } else {
        this.$Notice.warning({
          title: '文件类型错误',
          duration: 6,
          desc:
              '文件:' + file.name +
              '不是想要的文件,请选择后缀为xlsx,xls,jpg,jpeg,png,pdf,txt,doc,docx,gif,ppt,pptx的文件上传。'
        })
        return false
      }
    },
    uploadError(file) { //on-error	文件上传失败时的钩子
      this.$Modal.error({ title: file.message })
    },
    uploadSuccessess(res) { // on-success 文件上传成功时的钩子
      const _this = this
      if (res.result && res.result.msg) {
        return _this.$Message.success('上传文件失败')
      }
      if (res.success && res.result) {
        let name = res.result.fileName.split('.')[1]
        name = name in _this.attachmentIconPath ? name : 'default'
        let list = Object.assign(res.result, { iconType: _this.attachmentIconPath[name] })
        _this.fileList.push(list)
        _this.form.publicAttachments = _this.fileList
        return _this.$Message.success('上传文件成功')
      } else {
        _this.$Modal.error({ title: res.errorMsg })
      }
    }
}

css样式表

注意:这里用的less,如果你没装less环境,你就拆开就可以了,不用嵌套里面

<style lang="less" scoped>
.fileBox{
  margin-bottom: 14px;
  display: flex;
  justify-content: flex-start;
  flex-flow: wrap;
  .cardBox{
    width:170px;margin: 10px;
    cursor: pointer;
    position: relative;
    .title{
      word-wrap:break-word;
    }
    .mdclose{
      // border: 1px solid red;
      display: none;
      text-align: center;
      position: absolute;
      right: 50px;
      top: 50px;
    }
    .file_eye{
      display: none;
      position: absolute;
      left: 50px;
      top: 50px;
    }
    .eye_left{
      left: 70px;
    }
  }
  .cardBox:hover .mdclose, .cardBox:hover .file_eye{
    display: block;
  }
}
.uploadStyle{
  padding: 20px 0;
  width: 174px;
  height: 170px;
  line-height: 120px;
  margin: 12px 10px;
  border: 1px dashed #5cadff;
  border-radius: 8px;
  text-align: center;
  &>.ivu-icon-ios-cloud-upload{
    margin: 0 auto;
  }
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/155275.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【NI Multisim 14.0原理图设计基础——参数属性设置】

目录 序言 &#x1f46c;一、参数属性设置 序言 NI Multisim最突出的特点之一就是用户界面友好。它可以使电路设计者方便、快捷地使用虚拟元器件和仪器、仪表进行电路设计和仿真。 首先启动NI Multisim 14.0&#xff0c;打开如图所示的启动界面&#xff0c;完成初始化后&…

初始C语言-分支与循环语句

目录 一、语句 1. 什么是语句&#xff1f; C语句可分为以下五类&#xff1a; 1. 表达式语句 2. 函数调用语句 3. 控制语句 4. 复合语句 5. 空语句 2. 控制语句&#xff1a; 1. 条件判断语句也叫分支语句&#xff1a;if语句、switch语句&#xff1b; 2. 循环执行语句…

extern “C“的作用以及c/c++代码互调

一、目的相信从事嵌入开发的小伙伴肯定遇到过使用第三库的情景&#xff0c;有时候可能是C中调用C库&#xff0c;有时候可能又是C中调用C库&#xff1b;如果你遇到过&#xff0c;那你肯定知道extern "C"的作用.本篇的目的就是给大家介绍C/C互相调用的原理和实践。二、…

RK3588平台开发系列讲解(内核调试篇)CPU Hotplug 调试

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、CPU Hotplug 介绍二、CPU Hotplug 内核开关三、sysfs调试沉淀、分享、成长,让自己和他人都能有所收获!😄 📢多核系统底层驱动提供了cpu的Plugin/Unplug接口,可以实现动态调整cpu使用运行。 一、CPU Hotplu…

在 Node JS 中实现微服务架构

&#x1f4cd;简介&#x1f642; 正如我们在之前的博客“单体与微服务&#xff1a;一种实用方法”中讨论的那样。但是今天我们要在 NodeJS 中实现微服务架构。&#x1f449; 您可以使用任何技术&#xff0c;如 Spring、Python 等。但我们将使用 NodeJS 进行演示。&#x1f4cd;…

PostgreSQL下载、安装和配置使用

1&#xff09;下载 PostgreSQL官网下载&#xff1a;https://www.enterprisedb.com/downloads/postgres-postgresql-downloads 2&#xff09;安装 双击运行安装包 选择安装目录&#xff0c;不推荐安装在C盘。 选择需要安装的服务&#xff0c;不明白是啥的全选就行&#xf…

内含JAVA简单概括和JAVA所需安装的软件和详细教程,想学习JAVA无从下手,这篇文章带你迈出第一步

本文大致概括了JAVA编程语言的简史和特点,主要介绍了JAVA开发环境安装,涉及JDK,Sublime Text IntelliJ IDEA三个软件的简单介绍,安装和使用,最后编写了第一个JAVA代码,保姆级教学,跟着文章一步步来,迈出你学习JAVA的第一步吧! 初识JAVA一.JAVA语言简介二.JAVA发展简史三.JAVA语…

通过模拟器实现APP抓包

本教程将跳过工具安装部分&#xff0c;请正确食用&#x1f609;我的环境&#xff1a;操作系统&#xff1a;win11模拟器版本&#xff1a;雷电安卓模拟器稳定版-安卓7.1(32位) V5.0.46抓包工具&#xff1a;Wireshark-Version 4.0.1抓包工具&#xff1a;charles-Version 4.6.3工具…

SpringMVC(十一):SpringMVC文件上传中要解决的问题

文章目录 SpringMVC文件上传中要解决的问题 一、中文文件名编码问题 二、文件位置存储问题

【YOLO系列】YOLOv8算法(尖端SOTA模型)

前言回顾 在这里粗略回顾一下YOLOv5&#xff0c;这里直接提供YOLOv5的整理的结构图吧 Backbone&#xff1a;CSPDarkNet结构&#xff0c;主要结构思想的体现在C3模块&#xff0c;这里也是梯度分流的主要思想所在的地方&#xff1b;PAN-FPN&#xff1a;双流的FPN&#xff0c;必…

Linux——常用命令1.

✅<1>主页&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;linux &#x1f525;<3>创作者&#xff1a;我的代码爱吃辣 ☂️<4>开发环境&#xff1a;Visual Studio 2022 &#x1f4ac;<5>前言&#xff1a;Linux常用命令 目录 …

Centos7安装JDK1.8(OracleJDK8)

Linux安装JDK1.8 | OracleJDK8Linux安装JDK1.8(OracleJDK8)卸载openJDK官网下载OracleJDK8解压JDK到指定目录配置JDK变量查看jdk是否可用Linux安装JDK1.8(OracleJDK8) Hadoop官方的JDK要求https://cwiki.apache.org/confluence/display/HADOOP/HadoopJavaVersions JDK变量配置…

Java——》下载Hotspot 虚拟机源码

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 Java——》下载Hotspot 虚拟机源码一、官网下载压…

信息系统基础

目录 一、信息化概述 1.信息的定义 2.信息的特点 3.信息化的概念 4.信息对经济社会的意义 5.信息化对组织的意义 二、信息系统工程的总体规划 1.信息系统工程总体规划方法论 2.信息系统的生命周期和各阶段的目标 三.政府信息化与电子政务 1.电子政务的组成 2.电子政务…

mysql的binlog学习记录

文章目录什么是binlogbinlog格式StatementRowMixedbinlog使用什么是binlog MySQL Binary Log也就是常说的bin-log, ,是mysql执行改动产生的二进制日志文件。简单的来说&#xff0c;binlog日志用于记录所有更新了数据或者以及潜在更新了数据&#xff08;例如&#xff0c;没有匹…

在线学习(online learning)——Chapter 1 What is online learning

在线学习(online learning)——Chapter 1 What is online learning 引用 [1]Hoi S C H, Sahoo D, Lu J, et al. Online learning: A comprehensive survey[J]. Neurocomputing, 2021, 459: 249-289.点击阅读 [2]Orabona F. A modern introduction to online learning[J]. ar…

【1分钟了解网络交换机的6种命令配置模式】

我们在配置交换机的时候首先要了解的就是交换机命令模式&#xff0c;小编用Cisco思科交换机为例带大家了解交换机的6种配置模式。 Cisco IOS提供了用户EXEC模式和特权EXEC模式两种基本的命令执行级别&#xff0c;同时还提供了全局配置、接口配置、Line配置和vlan数据库配置等多…

linux篇【13】:网络应用层—网络版计算器,序列化

目录 一.应用层 1.再谈 "协议" 2.序列化&#xff0c;反序列化 &#xff08;1&#xff09;序列化&#xff0c;反序列化的实例&#xff1a; &#xff08;2&#xff09;自描述长度的协议 3.网络版计算器 细节&#xff08;1&#xff09;&#xff1a;报头方案 &am…

2.13Epd 中景园2.13寸电子墨水屏 显示原理(局部刷新指令)

显示有两种模式&#xff1a; 1、MCU RAM 操作之后一起写入显示屏的RAM 在MCU上分配一个成员大小为8位的数组 长度是像素点数的1/8(一位控制一个像素点) 如图&#xff1a;数组是Image_BW 之后是用 显示的操作算法将每个点由对应的数字或字母 汉字的字模写入数组中 最后将数组一起…

如何尽早发现潜在开发风险,降低项目风险?

1、提前规划风险预防和控制策略 针对开发流程中各环节可能存在的风险&#xff0c;项目经理需进行科学的项目风险分析&#xff0c;提前进行科学地规划和部署&#xff0c;制定符合项目特点的风险评估和监督机制&#xff0c;实行岗位负责制&#xff0c;提前制定控制策略&#xff0…