Vue3实现上传照片以及回显

Vue3实现上传照片以及回显

  • 一、安装Element Plus
  • 二、案例
    • 1、基本示例
  • 三、进阶案例
    • 1、代码
    • 2、代码解释
      • 1、上传接口展示
      • 2、查询接口展示
      • 组件属性
    • 3、效果展示


一、安装Element Plus

使用 Element Plus 组件库来实现上传照片和回显同样很简单,你可以按照以下步骤进行:

  1. 安装 Element Plus:首先,确保你已经安装了 Element Plus。你可以在 Vue 3 项目中使用 npm 或 yarn 来安装 Element Plus:

    npm install element-plus --save
    

    或者

    yarn add element-plus
    
  2. 引入 Element Plus:在你的 Vue 3 项目中的 main.js 文件中引入 Element Plus 并注册组件库中的组件:

    import { createApp } from 'vue'
    import ElementPlus from 'element-plus';
    import 'element-plus/lib/theme-chalk/index.css';const app = createApp(App)
    app.use(ElementPlus)
    app.mount('#app')
    
  3. 创建上传组件:在 Vue 3 中使用 Element Plus 的 Upload 组件来实现上传照片功能,同时使用 Image 组件来显示上传的照片。

  4. 处理文件上传:在上传组件中,可以使用 Upload 组件的 file-list 属性来绑定一个文件列表,当用户上传文件时,该列表会自动更新。你可以在 Image 组件中使用这个文件列表来显示上传的照片。

二、案例

1、基本示例

下面是一个简单的示例代码,演示了如何在 Vue 3 中使用 Element Plus 实现上传照片以及回显:

<template><div><el-uploadaction="#改为你上传服务URL路径" :file-list="fileList":on-change="handleFileUpload"><el-button type="primary">点击上传</el-button></el-upload><el-imagev-if="imageUrl":src="imageUrl"style="width: 100px; height: 100px; margin-top: 10px;"></el-image></div>
</template><script>
import { ref } from 'vue';export default {name: 'PhotoUpload',setup() {const fileList = ref([]);const imageUrl = ref('');const handleFileUpload = (file, fileList) => {imageUrl.value = URL.createObjectURL(file.raw);};return {fileList,imageUrl,handleFileUpload};}
};
</script>

在这个示例中,我们使用了 Element Plus 的 Upload 组件来实现文件上传,通过绑定 file-list 属性来控制文件列表。在 handleFileUpload 方法中,我们监听 Upload 组件的 change 事件,获取上传的文件,并使用 URL.createObjectURL 方法生成一个临时的 URL,然后将其赋值给 imageUrl 数据,以在页面上显示照片。

三、进阶案例

1、代码

<template><!-- 提交表单 --><div><el-form-item label="头像"><el-uploadclass="avatar-uploader"action="#改为你上传的文件路径":show-file-list="false":on-success="handleAvatarSuccess":before-upload="beforeAvatarUpload":data="imageFormData"name="files"accept="image/*"><img v-if="imageUrl" :src="imageUrl" class="avatar" /><el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon></el-upload></el-form-item><el-form-item><el-button type="primary" @click="onSubmit">提交</el-button></el-form-item></el-form></div>
</template><script  setup>
import { ref, onMounted } from "vue";
import { ElMessage } from "element-plus";
import { Plus } from "@element-plus/icons-vue";
import axios from "axios";//提交表单数据
const formInline = ref({});
//照片
const imageUrl = ref("");
//上传图片表单
const imageFormData = ref({type: "picture",
});
//记录图片ID
const imageId = ref("");const handleAvatarSuccess = (response, file) => {console.log("response=", response);console.log("file=", file);console.log("上传成功后的id=", response.data[0]);imageId.value = response.data[0];//回显图片getImage(imageId.value);
};//调用图片
const getImage = async (id) => {//根据ID调用接口获取图片try {const imageInfo = await axios.get("#改为你调用文件服务的接口地址" + id, {responseType: "blob",headers: {Accept:"image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8",},}).then((response) => {const blob = new Blob([response.data], { type: "image/*" });imageUrl.value = URL.createObjectURL(blob);});} catch (error) {console.error("获取数据失败", error);}
};//校验文件
const beforeAvatarUpload = (rawFile) => {if (!rawFile.type.startsWith("image/")) {ElMessage.error("请上传图片!");return false;} else if (rawFile.size / 1024 / 1024 > 2) {ElMessage.error("图片大小不能超过2MB!");return false;}return true;
};const onSubmit = () => {console.log("onSubmit");
};</script><style>
.avatar-uploader .el-upload {border: 1px dashed var(--el-border-color);border-radius: 6px;cursor: pointer;position: relative;overflow: hidden;transition: var(--el-transition-duration-fast);
}.avatar-uploader .el-upload:hover {border-color: var(--el-color-primary);
}
.el-icon.avatar-uploader-icon {font-size: 28px;color: #000;width: 100px;height: 100px;text-align: center;
}
.avatar-uploader .avatar {width: 100px;height: 100px;
}
</style>

2、代码解释

1、上传接口展示

  1. 接口中要求传入表单数据因此我使用了data属性。
  2. 接口要求文件的属性名为files,因此我用了name属性默认值为file,我重新赋值files。
  3. 这里的文件上传应用场景是图片因此我用了accept属性配置内容为属性。
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2、查询接口展示

回显图片我用了调用接口方式,返回的内容为图片因此需要配置请求参数responseType
在这里插入图片描述

组件属性

在这里插入图片描述

在这里插入图片描述

3、效果展示

在这里插入图片描述

在这里插入图片描述


  1. 积极进取:勇敢迈出第一步,成功就在前方等待着你。
  2. 持之以恒:坚持不懈,才能攀登到人生的高峰。
  3. 自信自强:相信自己的能力,你就已经走出了成功的第一步。
  4. 心怀感恩:感恩生活中的每一个美好,懂得感恩,才能更加幸福。
  5. 勇敢面对:面对困难,不要退缩,因为你比困难更强大。
  6. 坚定目标:设立明确的目标,为之努力奋斗,成功必将如期而至。
  7. 学无止境:不断学习、不断进步,才能不断提升自我。
  8. 团结合作:团结一心,共同进步,困难会迎刃而解。
  9. 积极乐观:乐观面对生活,阳光总在风雨后。
  10. 勤奋拼搏:勤奋是通往成功的唯一道路,拼搏是成功的最好伴侣。

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

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

相关文章

用栈实现队列(C语言)

目录 题目题目分析 代码栈的实现结构体。栈的初始化栈的销毁 入栈删除查找顶部数据判空 答案结构体初始化插入数据删除数据获取队列开头元素判空销毁栈 题目 题目分析 链接: 题目 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、po…

pyside6下没有designer.exe、pyside6-uic.exe等

使用conda安装的pyside6&#xff08;conda install pyside6&#xff09;&#xff0c;发现pyside6目录下没有designer.exe、pyside6-uic.exe等&#xff1b;designer.exe在Miniconda3/Library/bin下 pyside6-uic.exe、pyside6-rcc.exe在Miniconda3\Scripts下 但是 使用pip安装…

【MyBatis】MyBatis解析全局配置文件源码详解

目录 一、前言 思维导图概括 二、配置文件解析过程分析 2.1 配置文件解析入口 2.2 初始化XMLConfigBuilder 2.3 XMLConfigBuilder#parse()方法&#xff1a;解析全局配置文件 2.3.1 解析properties配置 2.3.2 解析settings配置 2.3.2.1 元信息对象&#xff08;MetaClas…

解决移植Metasploitable3到VM虚拟机无网络的问题

第一步 导入后不要开机&#xff0c;先在虚拟机设置里面将原有的两个网络适配器移除。 第二步 接着在选项里面&#xff0c;在客户机操作系统里面&#xff0c;选择Microsoft Windwos(W)&#xff0c; 版本选择Windows Server 2008 R2 x64 第三步 先打开虚拟机&#xff0c;然后…

Python_文件操作_学习

目录 一、关于文件的打开和关闭 1. 文件的打开 2.文件的关闭 二、文件的读取 1. 文件的读_r 2. 使用readline 3.使用readlines 三、文件的写入 1. 文本的新建写入 2.文本的追加写入 四、文件的删除和重命名 1.文件的重命名 2.文件的删除 五、文件的定位读写 1.t…

Unity Miscellaneous入门

概述 在Unity中有非常多好用的组件&#xff0c;也是Unity为我们提供的方便的开发工具&#xff0c;它的功能可能不是主流的内容&#xff0c;比如渲染&#xff0c;音乐&#xff0c;视频等等&#xff0c;所有Unity把这些内容统一归到了一个杂项文件组中。 Unity组件入门篇总目录-…

Python线程

Python线程 1. 进程和线程 先来了解下进程和线程。 类比&#xff1a; 一个工厂&#xff0c;至少有一个车间&#xff0c;一个车间中至少有一个工人&#xff0c;最终是工人在工作。 一个程序&#xff0c;至少有一个进程&#xff0c;一个进程中至少有一个线程&#xff0c;最终…

langchain实战-从0到1搭建ai聊天机器人

介绍 当前&#xff0c;人工智能大模型公司如雨后春笋般迅速涌现&#xff0c;例如 OpenAI、文心一言、通义千问等&#xff0c;它们提供了成熟的 API 调用服务。然而&#xff0c;随之而来的是不同公司的繁琐协议接入过程&#xff0c;这让许多开发者感到头疼不已。有没有一种统一…

SpringBoot + Redis实现对接口的限流

目录 前言 什么是限流&#xff1f; 实现限流 创建一个注解类 接着创建一个切面类 前言 在项目中&#xff0c;对于接口的限流&#xff0c;是任何项目都必不可少的一部分&#xff0c;主要是为了防止用户频繁的发送请求&#xff0c;对服务器造成压力。 另外一点就是防止外来攻…

C++之第八课

课程列表 今天我们来学一学C里的一些实用的东西。 1.域宽 说到域宽setw&#xff0c;就叒要加头文件了。 #include<iomanip> 使用格式是&#xff1a; cout<<setw(5)<<"123"; setw括号里面可以改数字&#xff0c;后面就是输出内容了&#xff…

COD论文笔记 Boundary-Guided Camouflaged Object Detection

动机 挑战性任务&#xff1a;伪装物体检测&#xff08;COD&#xff09;是一个重要且具有挑战性的任务&#xff0c;因为伪装物体往往与背景高度相似&#xff0c;使得准确识别和分割非常困难。现有方法的不足&#xff1a;现有的深度学习方法难以有效识别伪装物体的结构和细节&am…

MySQL索引、视图练习

素材 1.学生表&#xff1a;Student (Sno, Sname, Ssex , Sage, Sdept) 学号&#xff0c;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;所在系 Sno为主键 2.课程表&#xff1a;Course (Cno, Cname,) 课程号&#xff0c;课程名 Cno为主键 3.学生选课表&#xff1a;SC (Sno…

Home Credit - Credit Risk Model Stability

本篇是对Kaggle上Home Credit - Credit Risk Model Stability竞赛中的开源代码VotingClassifier Home Credit的解读。原链接在VotingClassifier Home Credit (kaggle.com)。 %%writefile script.py import sys from pathlib import Path import subprocess import os import g…

浅谈JMeter运行原理

浅谈JMeter运行原理 JMeter架构基础 JMeter基于Java平台开发&#xff0c;运行于Java虚拟机&#xff08;JVM&#xff09;之上。这意味着它可以在任何支持JVM的操作系统上运行&#xff0c;包括Windows、Linux、macOS等。其核心架构设计围绕着多线程执行机制&#xff0c;这使得它…

AI大模型探索之路-实战篇6: Function Calling技术调研之详细流程剖析

系列篇章&#x1f4a5; AI大模型探索之路-实战篇4&#xff1a;DB-GPT数据应用开发框架调研实践 AI大模型探索之路-实战篇5&#xff1a; Open Interpreter开放代码解释器调研实践 目录 系列篇章&#x1f4a5;一、前言二、Function Calling详细流程剖析1、创建OpenAI客户端2、定…

PCL 法向量加权的RANSAC拟合分割平面

目录 一、算法原理1、原理概述2、主要函数二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、原理概述

鸿蒙布局List简介

鸿蒙布局List简介 List--常见的布局容器List 创建方式创建方式一&#xff0c;通过Listitem创建方式二&#xff0c;通过ForEach和Listitem创建方式三&#xff0c;通过ListItemGroup List–常见的布局容器 List是在app开发中最常见的一种布局方式&#xff0c;例如通讯录、新闻列…

Wpf 使用 Prism 实战开发Day24

自定义询问窗口 当需要关闭系统或进行删除数据或进行其他操作的时候&#xff0c;需要询问用户是否要执行对应的操作。那么就需要一个弹窗来给用户进行提示。 一.添加自定义询问窗口视图 (MsgView.xaml) 1.首先&#xff0c;添加一个自定义询问窗口视图 (MsgView.xaml) <Use…

域内攻击 ----->约束非约束委派攻击

在域中&#xff0c;除了我们常见的横向移动以外&#xff0c;还有很多攻击&#xff0c;像什么kerberoasting&#xff0c;委派攻击&#xff0c;NTLMrelay啊...... 还有很多&#xff08;暂时只知道这些&#xff09; 以前在一篇公众号看到的一个笑话也荟萃了网安的一些攻击手法&am…