vue+element-plus上传图片及回显问题及数量限制

yizhihongxing

让我详细讲解一下“vue+element-plus上传图片及回显问题及数量限制”的完整攻略。

1. 准备工作

在开始写代码之前,需要先准备好以下工具和库:

  • vue.js:一个流行的 JavaScript 框架,用于构建前端应用程序。
  • element-plus:一个基于 Element UI 的 Vue 3 组件库,提供了丰富的 UI 组件和样式。
  • axios:一个简单易用的 http 客户端,用于处理前后端之间的数据传输。

2. 实现图片上传

2.1 HTML 代码

首先,需要在 HTML 中添加一个文件上传的 input 标签,示例代码如下:

<el-upload
  class="upload-demo"
  :action="uploadUrl"
  :limit="10"
  :on-exceed="handleExceed"
  :headers="headers"
  :data="{uploadType: 'image'}"
  :on-success="handleSuccess"
  :file-list="fileList"
>
  <el-button size="small" type="primary">上传图片</el-button>
  <div slot="tip" class="el-upload__tip">上传图片数量不得超过 10 张</div>
</el-upload>
  • class="upload-demo":设置样式,用于自定义样式;
  • :action="uploadUrl":指定上传的接口地址;
  • :limit="10":设置上传图片的最大数量为 10 张;
  • :on-exceed="handleExceed":当上传图片数量超出限制时触发的函数;
  • :headers="headers":设置请求头;
  • :data="{uploadType: 'image'}":额外的上传参数;
  • :on-success="handleSuccess":上传成功后的回调函数;
  • :file-list="fileList":显示已上传的图片列表。

2.2 JavaScript 代码

然后,在 Vue 组件中实现上传图片的相关逻辑,示例代码如下:

import axios from 'axios'

export default {
  data () {
    return {
      fileList: [],  // 已上传的图片列表
      uploadUrl: '/api/upload/image',  // 上传图片的接口地址
      headers: {Authorization: 'Bearer ' + localStorage.getItem('token')}  // 请求头
    }
  },
  methods: {
    handleExceed (files, fileList) {
      this.$message.warning(`只能上传 ${this.limit} 张图片!`)
    },
    handleSuccess (response, file, fileList) {
      this.fileList.push({
        id: response.id,
        url: response.url
      })
      this.$message.success('图片上传成功!')
    }
  }
}
  • fileList: []:初始化一个空的图片列表;
  • uploadUrl: '/api/upload/image':指定上传图片的接口地址;
  • headers: {Authorization: 'Bearer ' + localStorage.getItem('token')}:设置请求头;
  • handleExceed:当上传图片数量超出限制时触发的函数;
  • handleSuccess:上传成功后的回调函数;
  • id: response.id:将上传成功后返回的图片 ID 存储在图片列表中;
  • url: response.url:将上传成功后返回的图片 URL 存储在图片列表中。

3. 实现图片回显

3.1 HTML 代码

为了在页面中显示已上传的图片,需要添加一个图片列表,示例代码如下:

<el-image
  v-for="(item, index) in fileList"
  :key="item.id"
  :src="item.url"
  fit="contain"
  :preview-src-list="[item.url]"
  :lazy="false"
>
</el-image>
  • v-for="(item, index) in fileList":遍历已上传的图片列表;
  • :key="item.id":设置每个图片的唯一标识;
  • :src="item.url":指定要显示图片的 URL;
  • fit="contain":设置图片显示方式为自适应;
  • :preview-src-list="[item.url]":设置图片预览列表;
  • :lazy="false":关闭图片懒加载。

3.2 JavaScript 代码

为了在页面中显示已上传的图片,还需要在 Vue 组件中实现获取已上传的图片列表的接口,示例代码如下:

export default {
  data () {
    return {
      fileList: []  // 初始化一个空的图片列表
    }
  },
  mounted () {
    // 在组件挂载完成之后立即获取已上传的图片列表
    this.getFileList()
  },
  methods: {
    getFileList () {
      // 发送请求获取已上传的图片列表,并将返回的数据存储在 fileList 中
      axios.get('/api/upload/image/list').then(res => {
        this.fileList = res.data
      })
    }
  }
}
  • getFileList:定义获取已上传的图片列表的函数;
  • axios.get('/api/upload/image/list').then(res => { this.fileList = res.data }):发送请求获取已上传的图片列表,并将返回的数据存储在 fileList 中。

4. 图片数量限制

在 HTML 中的上传组件中,我们设置了图片上传的最大数量为 10 张,当用户上传的图片数量超出限制时,会触发 handleExceed 回调函数,示例代码如下:

handleExceed (files, fileList) {
  this.$message.warning(`只能上传 ${this.limit} 张图片!`)
}

在该函数中,我们可以使用 this.$message 方法弹出一个提示框,告知用户上传图片的数量超出限制。

同时,我们还可以在后端的图片上传接口中进行数量限制的验证,示例代码如下:

if (files.length > 10) {
  return res.status(400).json({ message: '只能上传 10 张图片!' })
}

这样,当用户上传的图片数量超出限制时,服务器会返回一个 HTTP 状态码为 400 的错误对象,并在错误对象中添加一个 message 属性,以向前端发送错误信息。

5. 示例演示

下面给出两个示例,分别演示了如何上传单张图片和批量上传多张图片。

5.1 示例1:上传单张图片

HTML 代码:

<template>
  <div>
    <h3>上传单张图片</h3>
    <el-upload
      class="upload-demo"
      :action="uploadUrl"
      :limit="1"
      :on-exceed="handleExceed"
      :headers="headers"
      :data="{uploadType: 'image'}"
      :on-success="handleSuccess"
      :file-list="fileList"
    >
      <el-button size="small" type="primary">上传图片</el-button>
      <div slot="tip" class="el-upload__tip">只能上传 1 张图片</div>
    </el-upload>
    <el-image
      :src="fileList[0] ? fileList[0].url : ''"
      fit="contain"
      :lazy="false"
    >
    </el-image>
  </div>
</template>

JavaScript 代码:

<script>
import axios from 'axios'

export default {
  data () {
    return {
      fileList: [],  // 已上传的图片列表
      uploadUrl: '/api/upload/image',  // 上传图片的接口地址
      headers: {Authorization: 'Bearer ' + localStorage.getItem('token')}  // 请求头
    }
  },
  methods: {
    handleExceed (files, fileList) {
      this.$message.warning(`只能上传 ${this.limit} 张图片!`)
    },
    handleSuccess (response, file, fileList) {
      this.fileList = [{
        id: response.id,
        url: response.url
      }]
      this.$message.success('图片上传成功!')
    }
  }
}
</script>

5.2 示例2:批量上传多张图片

HTML 代码:

<template>
  <div>
    <h3>批量上传多张图片</h3>
    <el-upload
      class="upload-demo"
      :action="uploadUrl"
      :limit="10"
      :on-exceed="handleExceed"
      :headers="headers"
      :data="{uploadType: 'image'}"
      :on-success="handleSuccess"
      :file-list="fileList"
    >
      <el-button size="small" type="primary">上传图片</el-button>
      <div slot="tip" class="el-upload__tip">上传图片数量不得超过 10 张</div>
    </el-upload>
    <el-image
      v-for="(item, index) in fileList"
      :key="item.id"
      :src="item.url"
      fit="contain"
      :preview-src-list="[item.url]"
      :lazy="false"
    >
    </el-image>
  </div>
</template>

JavaScript 代码:

<script>
import axios from 'axios'

export default {
  data () {
    return {
      fileList: [],  // 已上传的图片列表
      uploadUrl: '/api/upload/image',  // 上传图片的接口地址
      headers: {Authorization: 'Bearer ' + localStorage.getItem('token')}  // 请求头
    }
  },
  mounted () {
    // 在组件挂载完成之后立即获取已上传的图片列表
    this.getFileList()
  },
  methods: {
    handleExceed (files, fileList) {
      this.$message.warning(`只能上传 ${this.limit} 张图片!`)
    },
    handleSuccess (response, file, fileList) {
      this.fileList.push({
        id: response.id,
        url: response.url
      })
      this.$message.success('图片上传成功!')
    },
    getFileList () {
      // 发送请求获取已上传的图片列表,并将返回的数据存储在 fileList 中
      axios.get('/api/upload/image/list').then(res => {
        this.fileList = res.data
      })
    }
  }
}
</script>

这两个示例演示了如何通过 Vue.js 和 Element Plus 实现图片上传、回显和数量限制的功能。在实际项目中,可以根据需求进行相应的定制,并适配自己的业务场景。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue+element-plus上传图片及回显问题及数量限制 - Python技术站

(0)
上一篇 2023年6月9日
下一篇 2023年6月9日

相关文章

  • javascript获取隐藏元素(display:none)的高度和宽度的方法

    获取隐藏元素的高度和宽度是前端开发中一个很常见的需求。在使用display:none来隐藏元素时,它的高度和宽度是不可见的,这时候我们需要使用一些技巧来获取它们的真实高度和宽度。下面我将介绍两种常见的方法。 一、使用getBoundingClientRect()方法 getBoundingClientRect()是JavaScript中的一个方法,可以获取任…

    css 2023年6月10日
    00
  • Css如何实现背景色透明或半透明但内容不透明

    在 CSS 中,我们可以使用 opacity 属性或 rgba() 函数来实现背景色透明或半透明但内容不透明的效果。下面是完整攻略,包含了如何使用这两种方法实现透明或半透明背景色的过程和两个示例说明。 CSS 实现背景色透明或半透明但内容不透明 方法一:使用 opacity 属性 我们可以使用 opacity 属性来实现背景色透明或半透明但内容不透明的效果。…

    css 2023年5月18日
    00
  • Vue.js 2.0 和 React、Augular等其他前端框架大比拼

    Vue.js 2.0 和 React、Angular等其他前端框架大比拼 前端框架是前端开发人员最为重要的工具之一,其中Vue.js 2.0、React和Angular是目前较为流行的三种框架。本文将分别从以下几个方面对这三种框架进行比较和分析。 性能 从性能方面来看,Vue.js 2.0 可以说是三个框架中最快的,因为Vue.js的Virtual DOM(…

    css 2023年6月9日
    00
  • CSS去掉A标签(链接)虚线框的方法

    下面是详细讲解 CSS 去掉 A 标签虚线框的方法的完整攻略: 1. 为什么需要去掉 A 标签的虚线框? 在标准的 Web 开发中,当用户使用键盘 Tab 键切换页面元素时,浏览器会默认给 A 标签添加一个蓝色虚线框,用来提示当前的焦点元素。这个提示虚线框可以帮助一些视障用户更好地理解网页结构,提高网站的可访问性。但是,对于一些时尚/高端的网站设计,这个默认…

    css 2023年6月10日
    00
  • vscode配置setting.json文件实现eslint自动格式代码

    下面是详细的攻略: 配置 setting.json 文件实现 ESLint 自动格式代码 1. 安装 ESLint 插件 在 VS Code 插件商店中搜索 ESLint 并安装。安装成功后,在 VS Code 左下角会出现 ESLint 的图标,表示已经成功安装。如果没有出现图标,可以按 Ctrl + Shift + P 或 Cmd + Shift + P…

    css 2023年6月10日
    00
  • CSS实现背景图片全屏铺满自适应的3种方式

    当我们想要将背景图片全屏铺满屏幕时,可以通过CSS来实现。以下是3种实现方法及示例说明: 方法一:background-size + background-position 这种方法使用了两个CSS属性:background-size和background-position,可以将背景图片缩放并调整其位置以铺满屏幕,并自适应不同分辨率。 body { bac…

    css 2023年6月9日
    00
  • Webpack中publicPath使用详解

    让我来详细讲解“Webpack中publicPath使用详解”的完整攻略。 什么是publicPath publicPath是webpack中一个重要的配置项,它指定了在浏览器中引用静态资源时的路径前缀。在webpack打包生成的输出文件中,所有资源的引用路径都是以publicPath为前缀的。publicPath可以是一个相对路径,也可以是一个完整的URL…

    css 2023年6月9日
    00
  • jQuery实现侧边栏隐藏与显示的方法详解

    题目:jQuery实现侧边栏隐藏与显示的方法详解 一、前言 现如今,侧边栏已经成为了很多网站的标配,而隐藏与显示几乎是侧边栏最基础的操作。利用jQuery实现侧边栏的隐藏与显示,可以使得网站变得更为美观,功能也更加实用。本文将详细讲解jQuery实现侧边栏隐藏与显示的方法。 二、实现侧边栏隐藏与显示的基础知识 在实现侧边栏隐藏与显示之前,需要掌握以下基础知识…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部