vue+iview实现文件上传

yizhihongxing

下面是详细讲解"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指令以及dom操作详解

    Vue指令以及DOM操作详解 在Vue中,指令(Directive)是一个带有 v- 前缀的特殊属性。指令用于在模板中添加特殊的行为,常见的指令有v-if、v-for、v-bind、v-on等。 v-if指令 v-if指令用于根据表达式的值的真假,来切换元素的存在。例如下面这个示例: <div v-if="showFlag">…

    Vue 2023年5月27日
    00
  • Vue通过字符串关键字符实现动态渲染input输入框

    当我们需要动态生成一个输入框时,在Vue中可以通过字符串关键字符来实现,以下是具体步骤: 在Vue组件中定义一个data属性,用于存储动态生成的输入框的值 data() { return { inputValue: ” } }, 在模板中使用v-model绑定data属性,将动态生成的输入框与data属性进行双向绑定 <template> &l…

    Vue 2023年5月27日
    00
  • vue开发中数据更新但视图不刷新的解决方法

    当我们在Vue开发中使用数据绑定时,有时候会遇到数据更新了但视图没有及时刷新的情况,这往往是因为Vue的响应式系统没有及时捕捉到数据的变化。下面我将为您介绍几种解决方案。 1. 使用Vue.set或this.$set强制数据响应式更新 Vue2.0之后提供了Vue.set或this.$set方法,可以用来更新数据并强制响应式系统重新渲染视图。我们可以使用这个…

    Vue 2023年5月29日
    00
  • vue项目中的支付功能实现(微信支付和支付宝支付)

    下面是关于Vue项目中实现微信支付和支付宝支付的完整攻略。 简介 在Vue项目中需要实现支付功能,常见的方式有微信支付和支付宝支付。微信支付目前还需要申请微信支付商户号,而支付宝支付可以使用支付宝开放平台提供的接口实现。 在项目中可以将支付功能实现为一个组件,以便在需要支付的地方引入使用。 微信支付 微信支付需要完成以下步骤: 申请微信支付商户号; 在项目中…

    Vue 2023年5月27日
    00
  • vue如何加载本地json数据

    加载本地的JSON数据通常有两种方法: 方法一:通过ajax方式 1.首先,在Vue.js工程的目录下建立一个data目录,将要加载的 JSON 文件复制到这个目录下。 2.在组件中,使用ajax工具去请求这个文件,并在回调函数中将请求到的数据赋值给组件的数据变量。我们可以在组件的生命周期的某个时刻(如created)中调用这个ajax请求。 <tem…

    Vue 2023年5月28日
    00
  • 一文读懂vue动态属性数据绑定(v-bind指令)

    一文读懂Vue动态属性数据绑定(v-bind指令) Vue.js 是一种现代的、简洁的 JavaScript 框架,专注于构建用户界面。动态属性数据绑定是 Vue.js 提供的一个强大的组件,用于将 Vue 的数据响应式地绑定到 DOM 元素属性。其中,v-bind 指令可以用于将组件中的数据绑定至元素的属性上。 v-bind 指令语法 在 Vue 组件中使…

    Vue 2023年5月27日
    00
  • vue中如何将日期转换为指定的格式

    当我们在使用 Vue 开发应用时,有时需要将日期格式化成特定的格式,例如“YYYY-MM-DD hh:mm:ss”等等。Vue 在这方面提供了非常方便的功能,并且在格式化日期时使用的是第三方库 moment.js。下面是具体操作: 步骤一:安装 moment.js 库 要使用 moment.js 库,需要将其安装到项目中,可以使用 npm 或 yarn: n…

    Vue 2023年5月27日
    00
  • vue 页面回退mounted函数不执行的解决方案

    1.问题描述 当 Vue 页面回退时,如果使用了 keep-alive 组件进行缓存,再次进入该页面时,mounted 钩子函数不会执行。这是因为使用了 keep-alive 缓存组件,导致页面并未被销毁,因此再次进入页面时不会触发 mounted 钩子函数。 2.解决方案 方法一:使用 activated 钩子函数 当使用缓存组件时,在页面再次进入前会触发…

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