vue+elementui+springboot图片上传

news2025/6/22 18:22:00

1、前端代码

<template>
  <div>
    <el-upload
      class="avatar-uploader"
      action="http://localhost:8081/ch06/demo/uploadAvatar"
      :show-file-list="false"
      :on-success="handleAvatarSuccess"
      :before-upload="beforeAvatarUpload">
      
      <i class="el-icon-plus avatar-uploader-icon"></i>
  </el-upload>
  <div>
    <img style=" width: 50px;
  height: 50px;" v-if="imageUrl" :src="imageUrl" class="avatar">
  </div>
</div>
</template>
<script>
  export default {
    data() {
      return {
        imageUrl: ''
      };
    },
    methods: {
      handleAvatarSuccess(res, file) {
        this.imageUrl = URL.createObjectURL(file.raw);
      },
      beforeAvatarUpload(file) {
        const isJPG = file.type === 'image/jpeg';
        const isLt2M = file.size / 1024 / 1024 < 2;
 
        if (!isJPG) {
          this.$message.error('上传头像图片只能是 JPG 格式!');
        }
        if (!isLt2M) {
          this.$message.error('上传头像图片大小不能超过 2MB!');
        }
        return isJPG && isLt2M;
      }
    }
  }
</script>

<style scoped>

</style>

以下是对这段代码的详细解释:

  • <template> 部分:

    • <el-upload> 组件:
      • class="avatar-uploader":为上传组件添加类名。
      • action="http://localhost:8081/ch06/demo/uploadAvatar":指定上传的后端接口地址。
      • :show-file-list="false":表示不显示已上传文件列表。
      • :on-success="handleAvatarSuccess":上传成功后的回调函数。
      • :before-upload="beforeAvatarUpload":上传前的校验函数。
      • <i class="el-icon-plus avatar-uploader-icon"></i>:上传组件内显示的图标。
    • <div> 内的 <img>:根据条件显示图片,图片大小设置为 50x50 像素,通过 v-if="imageUrl" 控制是否显示,:src="imageUrl" 绑定图片源地址。
  • <script> 部分:

    • data() 中定义了 imageUrl 用于存储图片的 URL。
    • handleAvatarSuccess(res, file) 方法:在上传成功后,将上传文件的原始数据转换为 URL 并赋值给 imageUrl,以便显示图片。
    • beforeAvatarUpload(file) 方法:对要上传的文件进行校验,包括文件类型必须是 image/jpeg 以及文件大小不能超过 2MB,不满足条件则弹出错误消息并阻止上传。

 2、后端代码

 /**
     * 上传图片
     * @param file
     * @param request
     * @return
     * @throws IOException
     */
    @RequestMapping(value = "/uploadAvatar",method = {RequestMethod.POST})
    public Result imgUpDown(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws IOException {

        if(!file.isEmpty()) {
            String fileName = file.getOriginalFilename();
            System.out.println(fileName+"+++++");

            //设置上传文件的保存地址目录
            String dirpath=request.getServletContext().getRealPath("/upload");
            System.out.println(dirpath);
            File parentFilePath=new File(dirpath);
            //如果保存文件不存在就先创建目录
            if(!parentFilePath.exists()) {
                parentFilePath.mkdir();
            }

            String fileNewName = UUID.randomUUID() + fileName;

            File newFile = new File(parentFilePath, fileNewName);

            file.transferTo(newFile);


            return Result.success();
        }
        return null;
    }

以下是对这段代码的详细解读:

  • @RequestMapping(value = "/uploadAvatar", method = {RequestMethod.POST}):定义了一个处理 HTTP POST 请求的接口,路径为/uploadAvatar
  • public Result imgUpDown(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws IOException
    • @RequestParam("file"):表示从请求参数中获取名为file的多部分文件(上传的文件)。
    • 方法内首先检查文件是否为空。如果不为空:
      • 获取文件的原始文件名并打印。
      • 通过请求获取上下文的真实路径下的/upload目录路径,并创建对应的文件对象。
      • 如果该目录不存在则创建。
      • 生成一个包含随机 UUID 和原始文件名的新文件名。
      • 根据新文件名和目录创建新的文件对象。
      • 使用file.transferTo(newFile)将上传的文件数据保存到新文件中。
      • 最后返回表示成功的结果对象。如果文件为空则返回空。

总的来说,这段代码主要实现了接收一个上传的文件,进行一些处理(包括保存路径设置、文件名处理等)并保存文件的功能。

3、效果

4、总结

第一段代码是前端部分,包含一个 el-upload 组件用于进行文件上传操作。它配置了上传的接口地址、一些显示相关的属性以及上传成功和上传前的处理函数。上传成功后会更新显示图片的 URL,上传前会对文件的类型和大小进行校验,不符合要求则给出提示并阻止上传。

第二段代码是后端部分,对应处理前端上传请求的方法。它接收上传的文件和请求对象,在文件非空的情况下,获取文件名,确定文件保存的目录路径,创建或确保目录存在,生成新文件名,创建新文件并将上传文件的数据保存到该新文件中,最后返回成功结果。若文件为空则返回空。总体上实现了文件上传的后端逻辑处理。

 

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

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

相关文章

SIGMOD 2024 | 时空数据(Spatial-Temporal)和时间序列(Time Series)论文总结

SIGMOD2024于6月9号-6月14号正在智利圣地亚戈举行&#xff08;Santiago Chile&#xff09; 本文总结了SIGMOD 2024有关时间序列&#xff08;time series&#xff09;,包括时序数据库&#xff0c;查询优化等内容。以及时空数据&#xff08;spatial-temporal data&#xff09;的…

【Vue】自学笔记(四)

上一篇&#xff1a;Vue笔记&#xff08;三&#xff09;-CSDN博客 1.VueCli自定义搭建项目 先确保安装了全局工具VueCli 如果没有&#xff0c;则先运行命令 npm i vue/cli -g 选择最后一个自定义搭建项目 选择需要自动搭建的功能 这里我需要router和css预处理器就空格勾选上&…

干货!电脑如何录屏?6款win10录屏大师软件深度测评

电脑如何录屏&#xff1f;在2024年&#xff0c;截图或屏幕录制可以说是一种无价的工具。它是捕捉重要信息、与朋友和同事分享说明&#xff0c;或者只是存储您最喜爱的游戏和应用程序中的记忆的好方法。在 Windows 上录制屏幕非常简单。在本篇文章中&#xff0c;我们将讨论在win…

Node入门以及express创建项目

前言 记录学习NodeJS 一、NodeJS是什么&#xff1f; Node.js 是一个开源和跨平台的 JavaScript 运行时环境 二、下载NodeJs 1.下载地址(一直点击next即可&#xff0c;记得修改安装地址) https://nodejs.p2hp.com/download/ 2.查看是否安装成功&#xff0c;打开命令行 nod…

InfoComm 2024 直击:千视新品P3和KiloLink技术闪耀亮相

InfoComm 2024 直击&#xff1a;千视新品P3和KiloLink技术闪耀亮相&#xff0c;现场亮点不断 北京时间2024年6月13日&#xff0c;UTC-7时间6月12日&#xff0c;美国视听显示与系统集成展览会InfoComm 2024在美国拉斯维加斯正式开幕。作为全美规模最大、最具影响力的展会&#…

电脑数字键被锁住不能输入数字

情况: 反复点击数字键盘的NumLock,看它的灯是否能正常启动 1.如果NumLock灯可以正常的打开和关闭,并且无法输入内容 1.1打开控制面板 1.2 进入轻松使用中选择更改键盘的工作方式 1.3找到并点击设置鼠标键 1.4 赵到NumLock设置为关闭,然后确定即可

辽宁省食品安全管理人员精选模拟试题

新增(食品安全法实施条例)相关真题16道&#xff0c;具体如下: 1.食品生产企业可以制定低于食品安全标准或者地方标准要求的企业标准。(X) 2.食品生产者应当建立食品安全追溯体系&#xff0c;保证食品可追溯。(√) 3.食品生产企业的主要负责人对本企业的食品安全工作全面负责&am…

Java注解Annotation机制说明和基础使用(为什么Annotation直接促进了框架的繁荣发展?)

一、注解解决的问题【可忽略】 软件开发过程中&#xff0c;如何配置一直是一个重要的问题&#xff0c;对于一个框架&#xff0c;如果你不为它提供初始结构&#xff0c;它就无法理解你要做什么&#xff0c;自然无法工作。 1.问题&#xff1a;紧密贴合的代码和配置 在很久之前…

One能聊天接入百度千帆AppBuilder

One能聊天介绍:基于ChatGPT实现的微信小程序,适配H5和WEB端。包含前后端,支持打字效果输出流式输出,支持AI聊天次数限制,支持分享增加次数等功能One能聊天开源地址:https://github.com/oldinaction/ChatGPT-MPOne能聊天演示环境:可关注【阿壹族】公众号,并回复【One能聊…

spring框架(SSM)

Spring Framework系统架构 Spring框架是一个开源的企业级Java应用程序框架&#xff0c;它为开发Java应用程序提供了一个全方位的解决方案。Spring的核心优势在于它的分层架构&#xff0c;这使得开发者可以灵活选择使用哪些模块而无需引入不需要的依赖。下面是Spring框架的一些关…

Cisco Packet Tracer实验(三)

续实验二 问题一&#xff1a;使用二层交换机连接的网络需要配置网关吗&#xff1f;为什么&#xff1f; 二层交换机作为网络设备中的一种&#xff0c;主要用于在局域网&#xff08;LAN&#xff09;内部进行数据包的转发。它工作在OSI模型的第二层&#xff08;数据链路层&#xf…

08_基于GAN实现人脸图像超分辨率重建实战_超分辨基础理论

1. 超分辨的概念与应用 我们常说的图像分辨率指的是图像长边像素数与图像短边像素数的乘积,比如iPhoneX手机拍摄照片的分辨率为 4032px3024px,为1200万像素。 显然,越高的分辨率能获得更清晰的成像。与之同时,分辨率越高也意味着更大的存储空间,对于空间非常有限的移动设…

Embedding 模型的选择和微调

构建一个检索增强生成 (Retrieval-Augmented Generation, RAG) 应用的概念验证过程相对简单&#xff0c;但要将其推广到生产环境中则会面临多方面的挑战。 『RAG 高效应用指南』系列将就如何提高 RAG 系统性能进行深入探讨&#xff0c;提供一系列具体的方法和建议。同时读者也需…

StableSwarmUI 安装教程(详细)

文章目录 背景特点安装 背景 StableSwarmUI是StabilityAI官方开源的一个文生图工作流UI&#xff0c;目前处于beta阶段&#xff0c;但主流程是可以跑通的。该UI支持接入ComfyUI、Stable Diffusion-WebUI。其工作原理就是使用ComfyUI、Stable Diffusion-WebUI或者StabilityAI官方…

张艺兴step新专开启自由驾驶新纪元

张艺兴《Step》新专&#xff0c;开启自由驾驶新纪元&#xff01;当音乐与驾驶相遇&#xff0c;会碰撞出怎样的火花&#xff1f;当实力派艺人张艺兴遇上全新英文专辑《Step》&#xff0c;便为我们解锁了一种前所未有的出行体验&#xff01;这不仅仅是一张音乐专辑&#xff0c;更…

英伟达GPU对比分析:A100、A800、H100与H800

在当今技术迅速发展的时代&#xff0c;英伟达的GPU产品线提供了多种高性能选项&#xff0c;以满足不同类型的工作负载需求。本文将对英伟达的四种GPU型号——A100、A800、H100和H800进行深入对比分析&#xff0c;探讨它们在性能、架构、应用场景等方面的差异&#xff0c;以帮助…

Redis原理篇——分布式锁

Redis原理篇——分布式锁 分布式锁是什么&#xff1f;分布式锁有哪些特性&#xff1f;分布式锁常用实现方式Redis 实现分布式锁一、简单的 Redis 锁二、带过期时间的 Redis 锁三、加上 Owner 的 Redis 锁四、Lua 脚本确保原子性 分布式锁是什么&#xff1f; 分布式锁是在分布式…

HTML解析之Beautiful Soup

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 Beautiful Soup是一个用于从HTML和XML文件中提取数据的Python库。Beautiful Soup 提供一些简单的、函数用来处理导航、搜索、修改分析树等功能。Beau…

YOLOX: 无锚点机制 + 解耦头部设计 + 动态标签分配策略的高性能目标检测器 + Apache-2.0 开源可商用

YOLOX: 无锚点机制 解耦头部设计 动态标签分配策略的高性能目标检测器 Apache-2.0 开源可商用 1. Decoupled Head 解耦头部的使用2. 强化数据增强策略3. 采用无锚点检测机制4. 多正样本策略5. SimOTA标签分配策略6. CSPDarkNet 网络结构DarkNet53 的深度特征提取能力DarkNet…

简单http客户端程序

要求和目的 深入理解http协议以及http下载相关功能的程序设计 实验环境 Java语言&#xff0c;PC平台 实验要求 基本要求&#xff1a;使用Socket类&#xff0c;实现一个简单的HTTP客户端程序。用户输入URL&#xff0c;该程序可以从服务器下载URL指定的资源&#xff0c;并将之…