当前位置: 首页 > news >正文

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. 勤奋拼搏:勤奋是通往成功的唯一道路,拼搏是成功的最好伴侣。

相关文章:

  • Linux--进程概念
  • 配置yum源
  • HTML5表单控件:新时代的交互魔法手册
  • 深入探索Kafka:了解其不可或缺的核心组件
  • linux:切分大文件
  • 论文精读:UFO: A UI-Focused Agent for Windows OS Interaction
  • 521源码-在线客服-CRMChat网页版客服系统 UNIAPP 全方位在线客服系统源码与管理体系平台
  • TS代码解读:eslint-disable-next-line @typescript-eslint/no-namespace
  • “Excel+中文编程”衍生新型软件,WPS用户:自家孩子
  • 数据库查询-聚合函数详解,聚合函数应用,分组查询
  • 【相机开发问题总结】后台恢复到前台预览界面卡住
  • 【14】bat脚本备份mysql数据
  • 重大活动网络安全保障建设及运营指南
  • C++开源库glog使用封装--自定义日志输出格式,设置日志保留时间
  • nginx 配置stream模块代理并开启日志配置
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • Angular6错误 Service: No provider for Renderer2
  • ES6之路之模块详解
  • GitUp, 你不可错过的秀外慧中的git工具
  • Java 内存分配及垃圾回收机制初探
  • Javascripit类型转换比较那点事儿,双等号(==)
  • LintCode 31. partitionArray 数组划分
  • React-生命周期杂记
  • SpringCloud集成分布式事务LCN (一)
  • VUE es6技巧写法(持续更新中~~~)
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 今年的LC3大会没了?
  • 用jquery写贪吃蛇
  • 扩展资源服务器解决oauth2 性能瓶颈
  • #、%和$符号在OGNL表达式中经常出现
  • #知识分享#笔记#学习方法
  • (13)Hive调优——动态分区导致的小文件问题
  • (2.2w字)前端单元测试之Jest详解篇
  • (52)只出现一次的数字III
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (翻译)terry crowley: 写给程序员
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (五)IO流之ByteArrayInput/OutputStream
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转载)Google Chrome调试JS
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • ***监测系统的构建(chkrootkit )
  • *p++,*(p++),*++p,(*p)++区别?
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET 常见的偏门问题
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .Net(C#)自定义WinForm控件之小结篇