vue+iview实现文件上传

下面是详细讲解"vue+iview实现文件上传"的完整攻略:

准备工作

  1. 在项目中安装vue和iview
npm install vue iview --save
  1. main.js中引入vue和iview,并配置相关的组件
import Vue from 'vue'
import iView from 'iview'
import 'iview/dist/styles/iview.css'
import App from './App.vue'

Vue.use(iView)

new Vue({
  el: '#app',
  render: h => h(App),
})

实现文件上传

  1. HTML部分
<template>
  <div>
    <i-upload
      :action="uploadUrl"
      :before-upload="beforeUpload"
      :on-success="onUploadSuccess"
    >
      <Button>
        <Icon type="ios-cloud-upload-outline"></Icon>
        选择文件
      </Button>
    </i-upload>
  </div>
</template>

其中,使用了iview提供的i-upload组件,通过:action指定上传文件的API地址,:before-upload指定在上传前的操作,:on-success指定上传成功后的操作。

  1. JavaScript部分
<script>
  export default {
    data() {
      return {
        uploadUrl: 'http://your_api_url',
      }
    },
    methods: {
      beforeUpload(file) {
        const isExcel = /xlsx|xls|csv/.test(file.type)
        const isLt2M = file.size / 1024 / 1024 < 2

        if (!isExcel) {
          this.$Message.error('请上传xlsx、xls或csv格式的文件')
          return false
        }

        if (!isLt2M) {
          this.$Message.error('上传文件大小不能超过2MB')
          return false
        }

        return true
      },
      onUploadSuccess(res) {
        if (res.status === 0) {
          this.$Message.success('上传成功')
        } else {
          this.$Message.error('上传失败')
        }
      },
    },
  }
</script>

其中,beforeUpload()函数用于进行上传前的校验,通过正则表达式判断是否是需要上传的文件类型,通过文件大小判断文件是否超过了2MB,返回true则允许上传,返回false则阻止上传。

onUploadSuccess()函数用于在上传完成后进行提示操作。

示例说明

示例一:基本上传

<template>
  <div>
    <i-upload
      :action="uploadUrl"
      :before-upload="beforeUpload"
      :on-success="onUploadSuccess"
    >
      <Button>
        <Icon type="ios-cloud-upload-outline"></Icon>
        选择文件
      </Button>
    </i-upload>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        uploadUrl: 'http://your_api_url',
      }
    },
    methods: {
      beforeUpload(file) {
        const isExcel = /xlsx|xls|csv/.test(file.type)
        const isLt2M = file.size / 1024 / 1024 < 2

        if (!isExcel) {
          this.$Message.error('请上传xlsx、xls或csv格式的文件')
          return false
        }

        if (!isLt2M) {
          this.$Message.error('上传文件大小不能超过2MB')
          return false
        }

        return true
      },
      onUploadSuccess(res) {
        if (res.status === 0) {
          this.$Message.success('上传成功')
        } else {
          this.$Message.error('上传失败')
        }
      },
    },
  }
</script>

这个示例中,实现了一个基本的上传功能,上传文件时进行了校验,并在上传成功或者失败的时候进行了提示。

示例二:添加上传前和上传后的loading效果

<template>
  <div>
    <i-upload
      :action="uploadUrl"
      :before-upload="beforeUpload"
      :on-success="onUploadSuccess"
      :on-error="onUploadError"
      :on-progress="onUploadProgress"
    >
      <Button :loading="uploadLoading">
        <Icon type="ios-cloud-upload-outline"></Icon>
        选择文件
      </Button>
    </i-upload>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        uploadUrl: 'http://your_api_url',
        uploadLoading: false,
      }
    },
    methods: {
      beforeUpload(file) {
        const isExcel = /xlsx|xls|csv/.test(file.type)
        const isLt2M = file.size / 1024 / 1024 < 2

        if (!isExcel) {
          this.$Message.error('请上传xlsx、xls或csv格式的文件')
          return false
        }

        if (!isLt2M) {
          this.$Message.error('上传文件大小不能超过2MB')
          return false
        }

        this.uploadLoading = true

        return true
      },
      onUploadSuccess(res) {
        this.uploadLoading = false

        if (res.status === 0) {
          this.$Message.success('上传成功')
        } else {
          this.$Message.error('上传失败')
        }
      },
      onUploadError(err) {
        this.uploadLoading = false
        this.$Message.error('上传失败,请重试')
      },
      onUploadProgress(event, file, fileList) {
        console.log('上传进度:', event.percent)
      },
    },
  }
</script>

这个示例中,我们通过控制一个变量uploadLoading来实现上传前和上传后的loading效果。在beforeUpload()函数中,设置uploadLoadingtrue,表示上传中,上传完成或上传失败时,将其设置为false。此外,在i-upload中添加了另外三个属性:on-error用于处理上传错误,on-progress用于处理上传进度。

通过这个示例,我们可以很清晰地看出,通过控制loading效果,对用户友好性的提升是显著的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue+iview实现文件上传 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue中引入路径@的用法及说明

    那我就来详细讲解一下“Vue中引入路径@的用法及说明”。 在Vue中,我们经常使用import命令引入相关的模块文件。当我们引入一些比较深层次的文件和组件时,可能会出现引入路径很长的情况,这时候就需要使用@别名。 @别名是Vue官方提供的一个路径别名,它默认指向src目录,可以方便我们引入项目中的各个文件和组件。 下面来讲解一下如何使用: 首先,在新建Vue…

    Vue 2023年5月27日
    00
  • vue预览 pdf、word、xls、ppt、txt文件的实现方法

    实现网页预览PDF、Word、Excel、PPT、TXT等各种文件格式,一般需要使用第三方库进行实现。本文将介绍如何使用Vue和依赖库来预览这些文件格式。 1. 安装vue2-pdf预览库 Vue2-pdf 是一个基于 Vue 2.0 开发的 PDF 预览组件,支持PDF的浏览、缩放、翻页和导出等操作。具体实现步骤: 安装依赖 npm install vue…

    Vue 2023年5月28日
    00
  • Vue对象的单层劫持图文详细讲解

    针对“Vue对象的单层劫持”这个问题,我会进行详细讲解。 什么是 Vue 对象的单层劫持 在 Vue.js 框架中,当我们使用 Vue 来管理数据时,其实是通过建立 data 对象来实现的。Vue 采用了双向数据绑定的机制,当该对象中的值发生变化时,页面中的数据也随之发生变化。 而在 Vue.js 框架中,Vue 对象是单层劫持的,这意味着 Vue 在创建 …

    Vue 2023年5月28日
    00
  • vue动态渲染svg、添加点击事件的实现

    为了实现vue动态渲染svg以及添加点击事件,需要采用SVG语言作为矢量图形语言,使用vue指令中的v-html渲染SVG字符串,以及添加@click事件监听器。 实现步骤: 准备SVG字符串。可以是文件、变量定义或远程获取的内容。例如以下的SVG字符串: <svg width="100" height="100&quot…

    Vue 2023年5月28日
    00
  • 加快Vue项目的开发速度的方法

    下面是关于加快Vue项目开发速度的方法的完整攻略: 加快Vue项目开发速度的方法 1. 使用Vue CLI来快速创建项目 Vue CLI是Vue官方提供的脚手架工具,可以快速搭建一个Vue项目的基础结构。使用Vue CLI可以大大降低我们的开发时间和成本。按照以下步骤使用Vue CLI: 安装Vue CLI npm install -g @vue/cli 创…

    Vue 2023年5月28日
    00
  • Vue.js每天必学之内部响应式原理探究

    Vue.js每天必学之内部响应式原理探究 前言 Vue.js是一款前端框架,拥有许多优秀的特性,如组件化、响应式等,其中响应式即是Vue.js最为核心的部分之一。本文主要讲解Vue.js的响应式原理、数据双向绑定、getter与setter等内容。 Vue.js响应式原理 Vue.js的响应式原理包含以下步骤:1. 创建一个Vue实例。2. 在Vue实例中设…

    Vue 2023年5月28日
    00
  • vue页面加载时的进度条功能(实例代码)

    为了实现页面加载时的进度条功能,我们可以利用vue-router路由导航守卫的特性,监听路由跳转前后的事件,来实现页面加载状态的追踪和展示。下面是具体实现的步骤: 1.在项目中安装nprogress插件 npm install –save nprogress 2.在路由配置文件中引入nprogress import Nprogress from ‘npro…

    Vue 2023年5月27日
    00
  • vue和js中实现模糊查询方式

    下面给出实现模糊查询方式的完整攻略。 一、实现原理 要想实现模糊查询,需要的是对输入的关键字进行处理,将其与数据源进行匹配。可以利用JS的字符串操作方法来进行模糊匹配,例如使用indexOf方法来判断一个字符串中是否含有某个子串,如果存在,则匹配成功,可以将其作为搜索结果之一。 在Vue中,我们可以利用计算属性来实现模糊查询的应用逻辑,当数据源或者输入的关键…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部