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日

相关文章

  • iOS大文件的分片上传和断点上传的实现代码

    实现iOS大文件的分片上传和断点上传需要涉及以下几个步骤: 将文件分片 大文件上传过程中,一次性将整个文件上传是不可行的,会占用较多的网络资源和时间,容易出现失败或超时的情况。因此,将大文件分片上传成为了一种常见的方式。在iOS中,可以使用NSData的subdataWithRange方法实现文件的分片。具体实现代码如下: – (NSArray *)spli…

    Vue 2023年5月28日
    00
  • vue中使用vue-pdf的方法详解

    关于”vue中使用vue-pdf的方法详解”,以下是详细步骤: 1.安装 vue-pdf 在vue项目中,可以使用npm指令进行安装,在命令行中输入: npm install vue-pdf –save 2.配置 vue-pdf 在Vue项目中,需要在 main.js 中引入 vue-pdf 并进行全局注册: import VuePdf from ‘vue…

    Vue 2023年5月28日
    00
  • vue实现将一个数组内的相同数据进行合并

    要将一个数组内的相同数据进行合并,可以使用Vue.js提供的计算属性来完成。首先,需要对原始数据进行处理,将相同的数据进行合并,然后在模板中使用计算属性来渲染数据。 下面是一些示例说明: 示例一:将相邻重复的数字合并成一个,输出 [1,2,3,4,5] <template> <div> <p v-for="num in…

    Vue 2023年5月28日
    00
  • until封装watch常用逻辑简化代码写法

    我来详细讲解一下“until封装watch常用逻辑简化代码写法”的攻略。 什么是until until是Vue.js中一个常用的指令修饰符,它用于监听数据变化直到满足条件才执行操作。常用语法如下: <!– 监听value值变化,直到其等于一个值为9的时候才执行alert方法 –> <div v-on:click="alert(…

    Vue 2023年5月27日
    00
  • 微信js-sdk地理位置接口用法示例

    下面我会分为几个部分讲解“微信js-sdk地理位置接口用法示例”的完整攻略。 一、前置条件 在使用微信js-sdk地理位置接口之前,需要确保以下几个条件已经满足: 已经在微信公众平台中配置了JS接口安全域名。 已经在页面中引入微信公众平台提供的js文件(如:http://res.wx.qq.com/open/js/jweixin-1.4.0.js)。 已经申…

    Vue 2023年5月28日
    00
  • vue实现一个单文件组件的完整过程记录

    下面是“vue实现一个单文件组件的完整过程记录”的攻略: 什么是单文件组件? 单文件组件是Vue.js的一个重要概念。所谓单文件组件,就是一个Vue组件被封装在一个独立的文件中,包括组件所需的模板、CSS样式和JavaScript代码。单文件组件的扩展名通常为.vue,这个文件可以被其他Vue组件或Vue实例引用和渲染,从而将组件保持独立和可复用。 基本结构…

    Vue 2023年5月28日
    00
  • 从零到一详聊创建Vue工程及遇到的常见问题

    从零到一详聊创建Vue工程及遇到的常见问题 Vue.js是一款流行的JavaScript框架,非常适合构建现代化的Web应用程序,本文将介绍如何从零开始创建Vue.js工程,并解决一些常见的问题。 步骤1:安装Node.js 在开始之前,我们需要先安装Node.js。Node.js是一款基于Chrome V8引擎的JavaScript运行时,可以在服务器端运…

    Vue 2023年5月27日
    00
  • 详解vue-cli3开发Chrome插件实践

    详解vue-cli3开发Chrome插件实践 前言 Vue-CLI 3是Vue.js发布的脚手架构建工具。它易于使用,且支持自定义配置,本文就是基于Vue-CLI 3来开发Chrome插件的。 环境 在开始之前,确保本地已经安装了Node.js和Vue-CLI 3,安装方法如下: 1.下载 Node.js:https://nodejs.org/en/down…

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