【Java基础系列】文件上传功能

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

    • 一.简单介绍
      • 1.需求背景
      • 2.使用的技术
    • 二.后端
      • 1.controller
      • 2.service
    • 三.前端
      • 1.vue 页面
      • 2.data
      • 3.提交方法

一.简单介绍

1.需求背景

上传文件的需求背景通常如下:

  1. 网络应用程序开发:
    • 在开发一个网络应用程序时,可能需要用户上传文件,比如头像、文档、照片等。
    • 需要设计一个用户友好的界面,让用户能够轻松地选择并上传文件。
    • 后端服务器需要相应的接口和逻辑来处理上传的文件,包括存储、验证和检查文件类型等。
  2. 数据收集和处理:
    • 在数据收集和处理的过程中,上传文件是获取大量数据的一种方式,比如用户提交的调查问卷、日志文件等。
    • 需要确保上传的文件格式符合预期,可能需要进行数据清洗和验证。
    • 后续可能需要对上传的数据进行分析、存储或其他处理。
  3. 团队协作平台:
    • 在团队协作平台上,可能需要上传文件以便分享和协作,比如共享文档、图片、视频等。
    • 安全性是一个重要考虑因素,需要确保上传的文件不包含恶意代码,可能需要进行安全性扫描。
  4. 学习管理系统:
    • 在教育领域,学习管理系统可能需要学生上传作业、报告或其他学术文件。
    • 教育机构可能需要一个系统来管理这些上传的文件,确保它们与相关课程和任务相关联。
  5. 云存储服务:
    • 云存储服务允许用户上传文件并在不同设备之间共享。
    • 这可能涉及到文件同步、版本控制、访问权限管理等问题。

2.使用的技术

  • 前端使用 vue
  • 前端 element-ui 上传组件 el-upload
  • 后端使用 SpringBoot

二.后端

1.controller

多文件上传使用 files 参数进行接收,在 service 层进行具体的业务实现。

@ApiOperation(value = "上传图片", nickname = "上传图片")
@PostMapping("/upload")
public Result handleFileUpload(@RequestParam("files") MultipartFile[] files) {this.picInfoService.handleFileUpload(files);return Result.ok("上传图片成功");
}

2.service

public interface PicInfoService extends IService<PicInfo> {/*** 上传图片** @param file*/void handleFileUpload(MultipartFile[] file);
}

首先遍历 files 文件,获取去掉后缀后的文件名,创建存储目录,上传到服务器,并保存图片路径,存储下来,方便前端 vue 进行图片预览和查看详情。

@Override
public void handleFileUpload(MultipartFile[] files) {for (MultipartFile file : files) {log.info("handleFileUpload() called with: file= {}", file.getOriginalFilename());if (file.isEmpty()) {return;}String fileNameWithoutExtension = this.getFileNameWithoutExtension(file.getOriginalFilename());PicInfo pic = this.getPicByName(fileNameWithoutExtension);if (Objects.isNull(pic)) {try {String uploadDir = "/kwan/img/";File dir = new File(uploadDir);if (!dir.exists()) {dir.mkdirs();}File serverFile = new File(uploadDir + file.getOriginalFilename());file.transferTo(serverFile);pic = new PicInfo();pic.setPicName(fileNameWithoutExtension);pic.setPicUrl("https://www.qinyingjie.top/img/" + file.getOriginalFilename());pic.setType(0);this.save(pic);} catch (IOException e) {e.printStackTrace();log.error(e.getMessage());}}}
}

三.前端

1.vue 页面

主要是使用 el-upload 组件进行上传的,具体参数可以查看 element-ui 的官网 el-upload 组件的使用介绍。

<el-form :inline="true" :model="formInline" class="demo-form-inline"><el-form-item><el-select size="small" v-model="picType" placeholder="请选择" @change="queryPic"><el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option></el-select></el-form-item><el-form-item><el-button size="small" type="primary" @click="prepareAddPic">新增图片</el-button><el-dialog title="新增图片" :visible.sync="addPicVisible" style="width: 100%"><el-upload ref="upload" :limit="30" accept=".jpg,.gif,.png,.jpeg,.txt,.pdf,.doc,.docx,.xls,.xlsx" name="files" multiple action="http://43.139.90.182:8888/picInfo/upload" :on-preview="handlePreview" :on-remove="handleRemove" :file-list="fileList" :auto-upload="false" :on-success="handleUploadSuccess"><el-button slot="trigger" size="small" type="primary">选择图片</el-button><el-button style="margin-left: 10px" size="small" type="success" @click="submitUpload">上传到服务器</el-button></el-upload></el-dialog></el-form-item>
</el-form>

2.data

data() {return {form: {picUrl: '',type: 0,},formInline: {picType: 0,},//待上传的图片fileList: [],// 用户列表数据picList: [],loading: false,elementui_page_component_key: 0,currentPage: 1,pageSize: 6,total: 0,imageDialogVisible: false,addPicVisible: false,editPicVisible: false,enlargedImageUrl: '',currentRowId: null,imageIndex: 0, // 当前展示的图片索引options: [{value: 0,label: '宝宝',},{value: 1,label: '学习',},{value: 2,label: '风景',},{value: 3,label: '美女',},{value: 4,label: '猫咪',},{value: 5,label: '素材',},{value: 6,label: '动漫',},{value: 99,label: '其他',},],picType: 0,}
},

3.提交方法

在方法模块定义如下提交方法

async submitUpload() { this.$refs.upload.submit() this.addPicVisible = false },

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

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

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

相关文章

nodejs微信小程序+python+PHP-健身俱乐部在线管理平台的设计与实现-安卓-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

RNN 网络结构及训练过程简介

本文通过整理李宏毅老师的机器学习教程的内容&#xff0c;介绍 RNN&#xff08;recurrent neural network&#xff09;的网络结构。 RNN 网络结构, 李宏毅 RNN RNN 的特点在于存储功能&#xff0c;即可以记忆前面时刻的信息。 最简单的 RNN 结构如下&#xff1a; 当然&a…

最新AI创作系统ChatGPT系统运营源码,支持GPT-4图片对话能力,上传图片并识图理解对话,支持DALL-E3文生图

一、AI创作系统 SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01;本系统使用NestjsVueTypescript框架技术&#xff0c;持续集成AI能力到本系统。支持OpenAI DALL-E3文生图&#xff0c;…

Canvas艺术之旅:探索锚点抠图的无限可能

说在前面 在日常的图片处理中&#xff0c;我们经常会遇到需要抠图的情况&#xff0c;无论是为了美化照片、制作海报&#xff0c;还是进行图片合成。抠图对于我们来说也是一种很常用的功能了&#xff0c;今天就让我们一起来看下怎么使用canvas来实现一个锚点抠图功能。 效果展示…

【数据结构实验】查找(一)基于散列表的查找算法

文章目录 1. 引言2. 实验原理2.1 散列表2.2 线性探测法2.3 冲突解决 3. 实验内容3.1 实验题目&#xff08;一&#xff09;输入要求&#xff08;二&#xff09;输出要求 3.2 算法实现3.3 代码整合 4. 实验结果 1. 引言 本实验将通过C语言实现基于散列表的查找算法 2. 实验原理 …

Django 通过 Trunc(kind) 和 Extract(lookup_name) 参数进行潜在 SQL 注入 (CVE-2022-34265)

漏洞描述 Django 于 2022 年6月4 日发布了一个安全更新&#xff0c;修复了 Trunc&#xff08;&#xff09; 和 Extract&#xff08;&#xff09; 数据库函数中的 SQL 注入漏洞。 参考链接&#xff1a; Django security releases issued: 4.0.6 and 3.2.14 | Weblog | Djang…

在 Linux 中重命名文件和目录

目录 前言 使用 mv 命令重命名文件和目录 通过组合 mv、find 和 exec 命令重命名与某个模式匹配的多个文件 使用 rename 命令轻松重命名多个文件 总结 前言 在这篇基本命令行教程中&#xff0c;你将学习在 Linux 终端重命名文件和目录的各种方法。 如何在 Linux 终端中重命…

Vue框架学习笔记——键盘事件

文章目录 前文提要键盘事件&#xff08;并不是所有按键都能绑定键盘事件&#xff09;常用的按键不同的tab和四个按键keyCode绑定键盘事件&#xff08;不推荐&#xff09;Vue.config.keyCode.自定义键名 键码 神奇的猜想div标签和click.enterbutton标签和click.enter 前文提要 …

基于卷积优化算法优化概率神经网络PNN的分类预测 - 附代码

基于卷积优化算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于卷积优化算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于卷积优化优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

1.前端--基本概念【2023.11.25】

1.网站与网页 网站是网页集合。 网页是网站中的一“页”&#xff0c;通常是 HTML 格式的文件&#xff0c;它要通过浏览器来阅读。 2.Web的构成 主要包括结构&#xff08;Structure&#xff09; 、表现&#xff08;Presentation&#xff09;和行为&#xff08;Behavior&#xff…

『亚马逊云科技产品测评』活动征文|AWS 域名注册、启动与连接 EC2 新实例、端口开放详细教程

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 目录 一、AWS 域名注册 二、AWS 域名解析 三、个人网站 ICP 备案 …

Nacos安装使用

Nacos安装使用 官方下载地址: https://github.com/alibaba/nacos/releases 官方文档地址: https://nacos.io/zh-cn/docs/quick-start.html Nacos介绍 Nacos是阿里巴巴开源的一款支持服务注册与发现&#xff0c;配置管理以及微服务管理的组件。用来取代以前常用的注册中心&a…

第二十章 解读PASCAL VOC2012与MS COCO数据集(工具)

PASCAL VOC2012数据集 Pascal VOC2012官网地址&#xff1a;http://host.robots.ox.ac.uk/pascal/VOC/voc2012/ 官方发表关于介绍数据集的文章 《The PASCALVisual Object Classes Challenge: A Retrospective》&#xff1a;http://host.robots.ox.ac.uk/pascal/VOC/pubs/everi…

CH01_适应设计模式

Iterator模式&#xff08;迭代器模式&#xff09; 迭代器模式&#xff08;Iterator&#xff09;,提供一种方法&#xff0c;顺序访问一个聚合对象中各个元素&#xff0c;而不是暴露该对象的内部表示。 类图结构 说明 Iterator&#xff08;迭代器&#xff09; 该角色负责定义按…

深入理解 Django 中的事务管理

概要 在数据库操作中&#xff0c;事务是确保数据完整性和一致性的关键机制。Django 作为一个强大的 Python Web 框架&#xff0c;提供了灵活而强大的事务管理功能。理解和正确使用 Django 中的事务对于开发高质量的 Web 应用至关重要。本文将深入探讨 Django 的事务管理机制&a…

2.多行输入【2023.11.24】

1.问题描述 编写一个Python程序&#xff0c;将字符串 ‘Hello World!’ 存储在变量 str1 中&#xff0c;将字符串 ‘Hello Python!’ 存储在变量 str2 中&#xff0c;然后使用 print 语句分别将它们在不同行打印出来。 2.解决思路 使用print()函数即可 3.代码实现 str1&qu…

1.5 C语言之字符输入输出

1.5 C语言之字符输入输出 一、概述二、字符计数三、行计数四、单词计数五、练习 一、概述 字符文本流&#xff0c;是由多行字符构成的字符序列&#xff0c;而每行字符都由0个或多个字符组成&#xff0c;行末是一个换行符。 标准库提供的输入输出模型&#xff0c;用于读取文本内…

前端vue3——html2canvas给网站截图生成宣传海报

文章目录 ⭐前言⭐选择html2canvas实现网页截图&#x1f496; 截图 ⭐图片url截图显示不出来问题&#x1f496; 解决 ⭐最终效果&#x1f496; 定义海报 ⭐总结⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于 前端vue3——html2canvas给网站截图生成宣传…

JVM字节码文件的相关概述解读

Java全能学习面试指南&#xff1a;https://javaxiaobear.cn 1、字节码文件 从下面这个图就可以看出&#xff0c;字节码文件是可以跨平台使用的 想要让一个Java程序正确地运行在JVM中&#xff0c;Java源码就必须要被编译为符合JVM规范的字节码。 https://docs.oracle.com/java…

3. 深入探究文件 IO

3. 深入探究文件 IO 1. Linux 系统如何管理文件1.1 静态文件与inode1.2 文件打开时的状态 2. 返回错误处理与errno2.1 strerror 函数2.2 perror 函数 3. 空洞文件4. O_APPEND 和 O_TRUNC5. 多次打开同一个文件6. 复制文件描述符6.1 dup6.2 dup2 7. 文件共享7.1 同一个进程中多次…