个人技术总结————SpringBoot图片上传及jar包部署测试

081900317_李楷鸿 学生 2022-06-26 20:33:14
这个作业属于哪个课程2022年福大-软件工程、实践-W班
这个作业要求在哪里软件工程实践总结&个人技术博客
这个作业的目标个人技术总结————SpringBoot图片上传及jar包部署测试
其他参考文献CSDN博文,构建之法(邹欣 第三版)

目录

  • 技术回顾与总结
  • 学习路线
  • 开发收获
  • SpringBoot图片上传及jar包部署测试
  • 技术概述
  • 技术详述
  • 图片上传
  • 自定义异常处理
  • 图片上传异常处理类设置
  • 统一异常处理
  • 指定参数,单文件,多文件上传
  • 图片限制
  • 类型限制
  • 大小限制
  • 文件名处理
  • 存放位置
  • 文件上传
  • 设置对外访问路径
  • liunx系统环境配置与jar包部署
  • JDK安装
  • JDK下载
  • 文件上传
  • 解压
  • 配置环境变量
  • tomcat安装
  • 下载tomcat
  • 上传
  • 解压
  • 启动tomcat
  • 查看是否启动成功
  • 外部访问tomcat
  • 关闭tomcat
  • 修改端口
  • Mysql数据库安装
  • 查询是否安装数据库
  • 下载官方mysql包
  • 安装mysql包
  • 安装mysql
  • 启动mysql
  • 查看mysql运行状态
  • 查看初始密码
  • 进入数据库
  • 修改密码
  • redis安装
  • 下载redis
  • 解压redis
  • 编译redis
  • 安装redis
  • 启动redis
  • 查看redis进程
  • 关闭端口访问限制
  • 后台部署jar包
  • 启动运行
  • 关闭运行
  • 问题解决
  • 图片上传路径访问异常
  • mysql数据库远程访问问题
  • mysql数据库安装异常
  • 总结
  • 图片上传
  • liunx环境搭建及jar包部署
  • 参考文献、参考博客

技术回顾与总结

学习路线

java后端学习路线图

开学初制定的学习路线,并没有完成相应学习路线的学习,目前学习了JavaWeb,常用的开发框架SpringBoot,Mybatis-plus,以及SSM框架整合等,此外还学习了Liunx基础知识,对redis缓存有了初步了解。

开发收获

在团队项目开发中主要负责后端接口的开发,我们组的技术栈包括SpringBoot,MyBatis-plus,Redis等。在开发过程中,也很好地对执行了代码规范,不再是先写代码再执行规范。同时也学会了SpringBoot图片上传接口的实现,自定义异常处理机制,以及jar部署Liunx服务器对图片上传进行测试。此外,还了解了一些SpringBoot开发规范,可以很好地进行开发。除了基本的层次以外,可以添加DTO层,用于封装sql语句返回的复杂内容,以及VO层,对前端请求参数进行封装。使用springboot自带的@validated注解,对前端参数进行校验,会更方便。同时也很好地锻炼了与队友的沟通能力。

SpringBoot图片上传及jar包部署测试

技术概述

实现图片上传接口,用户可以上传单张或者多张图片,对图片的大小,类型进行限制,指定存储服务器的位置,同时对图片上传异常进行自定义异常处理。同时搭建在liunx服务器上的jar包环境,部署jar包进行测试。

技术详述

图片上传

上传图片部分代码

图片上传

自定义异常处理
图片上传异常处理类设置

图片上传过程中,用户可能会选择错误的图片上传,此时就应该抛出对应的异常并进行处理。所以我们要创建exception包下创建FileUploadException类,并继承自RuntimeException类。此外还要处理图片空异常,大小超出限制异常,图片类型异常,图片上传IO流异常,继承自FileUploadException。

文件上传异常


图片上传异常类

图片上传异常类

统一异常处理

然后在GlobalExceptionController的fileUploadexceptionHandler()的@ExceptionHandler注解中添加FileUploadException.class异常的处理;最后在方法中处理这些异常,并向前端返回异常信息。GlobalExceptionController的@ControllerAdvice注解进行全局增强处理。

全局异常处理

指定参数,单文件,多文件上传

指定参数MultipartFile对象,实现单文件上传,MultipartFile数组,可以实现多文件上传,与单文件上传不同的是,对MultipartFile数组进行for循环处理。

图片上传控制类

图片限制
类型限制

设置图片的类型,不属于avatatType中的图片类型,抛出异常,并通过全局异常处理,向前端返回异常信息。

图片上传限制


图片上传类型错误

大小限制

设置图片上传大小,对超出大小的图片,抛出异常,并通过全局异常处理,向前端返回异常信息。

图片大小限制


图片大小异常

文件名处理

保存图片的后缀,使用uuid对文件名进行改写,保证文件名的唯一性,并将将其拼接。此外,对于上传文件为中文名时,在liunx系统上出现乱码,导致浏览器无法直接访问的现象出现,该方法可以避免这种情况的出现。

文件名处理

存放位置

将图片存储位置设置为liunx服务器上的固定路径,服务器重启后,文件路径都不会改变,可以直接通过url访问,当然要添加路径映射。

文件存储路径

文件上传

使用MultipartFile对象的transferTo()实现文件上传,文件上传IO异常,抛出异常,并通过全局异常处理,向前端返回异常信息。

文件上传

设置对外访问路径

如果直接访问静态资源是访问不到的,需要进行路由映射。使用addResourceHandlers()方法添加路径映射。

  • addResoureHandler:指的是对外暴露的访问路径
  • addResourceLocations:指的是内部文件放置的目录

    路径映射

liunx系统环境配置与jar包部署

部署服务器要从零开始,安装JDK,才能运行jar包。如果是SpringBoot项目的话,无需安装tomcat就可以运行,因为jar包自带tomcat。此外,还要安装mysql数据库,导入数据库资源(推荐使用navicat远程访问)。如果,使用到redis缓存处理,要安装redis数据库,并将redis挂在后台运行。服务器管理安全组开启相应的端口访问限制。将jar包部署到后台运行。

JDK安装

liunx中安装jdk有两种方式:一种是tar.gz安装,一种是rpm安装方式安装,个人更推荐tar.gz方式安装

JDK下载
文件上传

xftp文件上传工具将文件上传,在Linux中的根目录下有一个 usr 共享目录,因为一些软件不仅 root要用,其他用户也要用,所以我们建议将软件安装在这个目录下,即 /usr目录下

解压
  • 使用liunx命令解压jdk
    tar -zxvf ***.tar.gz
    
  • 查看jdk版本号
    cd /usr/jdk/bin/
    执行./java -version
    
配置环境变量

为了可以在任何地方使用java命令所以配置环境变量
修改系统的配置文件,设置环境变量并在其中追加上Path

  • 配置环境变量
    vi /etc/profile    
    在profile后面最加
    export JAVA_HOME=/usr/jdk
    export PATH=$PATH:$JAVA_HOME/bin
    
  • 重新加载配置
    source /etc/profile    加载配置生效
    
tomcat安装

当然SpringBoot项目的jar包可以省略这一步。Tomcat是由java写的,所以我们在安装 Tomcat 之前必须安装JDK并配置环境变量

下载tomcat
上传

使用xftp连接服务器上传

解压

使用liunx命令解压到指定目录下

tar -zxvf tomcat 或 tar -zxvf tomcat -C /user/
启动tomcat

进入tomcat的bin目录,并执行startup.sh脚本

cd /usr/apache-tomcat-8.5.78/bin
执行./startup.sh 
查看是否启动成功

查看 Tomcat 是否启动成功

执行 jps

出现Bootstrap、Jps即启动成功

tomcat是否启动成功

外部访问tomcat

关闭防火墙,开启对应端口的访问限制

systemctl stop firewalld       关闭网络防火墙(暂时关闭,下次Linux重启时会自动开启防火墙)
systemctl disable firewalld        关闭开机自启动(永久关闭,注意,先执行第一句,再执行这一句)
关闭tomcat

进入tomcat的bin目录,并执行shutdown.sh脚本

cd /usr/apache-tomcat-8.5.78/bin
执行./shutdown.sh 
修改端口

进入Tomcat的conf目录修改server.xml配置文件其中的端口号

cd /usr/tomcat/conf/
执行vim server.xml
Mysql数据库安装

CentOS7 版本中MySQL数据库已从默认的程序列表中移除

查询是否安装数据库
rpm -qa | grep -i mysql

查询结果表明我安装的是5.7.38版本

mysql安装查询结果

下载官方mysql包
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
安装mysql包
yum -y install mysql57-community-release-el7-10.noarch.rpm
安装mysql
yum -y install mysql-community-server

如果执行过程中出现Unable to find a match: mysql-community-server,可以通过命令解决

yum module disable mysql
启动mysql
systemctl start mysqld.service
查看mysql运行状态
service mysqld status

mysql运行状态显示active即显示成功

mysql运行状态

查看初始密码
grep 'password' /var/log/mysqld.log

红色部分即为密码

查看初始密码

进入数据库
mysql -uroot -p

如果数据库无法访问,修改mysql配置文件my.cnf,新增skip-grant-tables

// 先关闭mysql服务
service mysqld stop
// 查找my.cnf所在目录
find / -name my.cnf
// 编辑my.cnf
vi my.cnf
// 插入
skip-grant-tables
// 重启服务器
service mysqld start
修改密码
show databases;
use mysql;
// 设置密码
update user set authentication_string=password('passsword') where user='root';

修改配置文件my.cnf,删除skip-grant-tables,重启,再登录

redis安装
下载redis
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
解压redis
tar -zxvf redis-5.0.7.tar.gz
编译redis

redis使用C语言开发的,要安装gcc编译器

make 输入make指令作为编译命令
安装redis
make PREFIX=/usr/local/redis install

PREFIX= 这个关键字的作用是编译的时候用于指定程序存放的路径,指定存放路径也方便后续卸载,rm -rf redis存放目录
配置文件会存放在bin目录下,redis.conf 存放配置文件

启动redis
  • 前台进程
    // redis 作为前台进程
    ./bin/redis-server ./redis.conf
    
  • 后台进程

    修改redis.conf配置文件,可以通过liunx常用命令编辑配置文件redis.conf,将daemonize no修改为daemonize yes,即可以后台运行

查看redis进程
  • 采取查看进程方式
    ps -aux | grep redis
    
  • 采取端口监听查看方式
    netstat -lanp | grep 6379
关闭端口访问限制
  • 关闭防火墙
    systemctl stop firewalld       关闭网络防火墙(暂时关闭,下次Linux重启时会自动开启防火墙)
    systemctl disable firewalld        关闭开机自启动(永久关闭,注意,先执行第一句,再执行这一句)
    
  • 打开安全组端口访问限制
    • 3306 mysql数据库远程访问端口
    • 6379 reids数据库远程访问端口
    • 465 是为SMTPS(SMTP-over-SSL)协议服务开放的,用来发送邮件,防止邮件泄露
后台部署jar包
启动运行

将jar包放到服务器的任意目录下,执行下面命令即可启动项目服务,可以通过jar包中指定的端口访问

// 这种方法,jar包会在后台运行,并输出日志到指定文件夹下
// 后台运行,nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行
nohup java -jar test.jar >temp.txt &
关闭运行
  • 查询端口对应的进程信息
 netstat -alnp | grep portNumber
  • 根据jar包的进程号pid,关闭进程
    kill -9 pid

问题解决

图片上传路径访问异常

jar包部署到liunx服务器上,且设置文件的对外访问路径,但是图片依旧无法访问

  • 考虑到本地windows和liunx服务器文件系统是不同的,本地测试,可以访问并不意味着liunx服务器也可以。
    • 在windows环境中,开发环境时:user.dir 指向的是项目的根目录;如果将项目部署到tomcat下,user.dir指向的路径:当前用户的桌面
    • 在linux环境下,将项目部署到tomcat中指向的路径为tomcat的bin目录。
  • 此外,重启服务器后,tomcat都会创建不同的临时文件夹进行存储图片, 所以服务器每次重启后都会都会访问不到之前的静态资源,因为新的文件夹里没有之前的静态资源。
    • 虽然尝试过配置动态的路径映射,但是似乎好像也没办法通过url访问
  • 如果配置了SpringSecurity的访问限制,要配置,相应的映射路径可以直接访问,不需要token验证。

mysql数据库远程访问问题

本地无法访问远程数据库,navicat访问报错

  • 检查是否关闭3306端口防火墙
    // 查看防火墙是否已开放3306端口
    firewall-cmd --query-port=3306/tcp
    // 设置3306端口为永久开放
    firewall-cmd --add-port=3306/tcp --permanent
    // 查看firewalld状态,发现当前是dead状态,即防火墙未开启
    systemctl status firewalld
    // 关闭防火墙
    systemctl stop firewalld
    // 重启防火墙(设置了新的端口记得先关闭,再重启)
    systemctl start firewalld
    
  • 服务器安全组是否开放3306端口
  • 当前root是否有远程访问的权限

    显示 host ip is not allowed to connect to this MYSQL server.
    // 登录服务器mysql数据库,修改root下host值,任意远程ip都可以访问

    update user set host='%' where user='root'
    

mysql数据库安装异常

使用 yum -y install mysql-community-server 命令安装mysql,下载速度慢,有时候会安装失败

  • Failing package is: mysql-community-client-5.7.38-1.el7.x86_64 GPG Keys are configured as: file://
    原因可能是:MySQL GPG 密钥已过期导致
    解决办法:执行下列命令
    rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
    
  • 如果无法解决建议删除后重新安装
    • 关闭MySQL 服务
      service mysql stop
      
    • 查询是否安装
      rpm -qa | grep -i mysql
      

      查询组件服务

    • 卸载并删除mysql所有组件服务
      rpm -ev ***
      
    • 查看MySQL对应的文件夹
      find / -name mysql
      

      查询文件夹

    • 删除对应文件夹
      rm -rf ***
      
    • 最后验证是否删除完成
      rpm -qa | grep -i mysql
      

总结

图片上传

图片上传是在文件上传的基础上添加文件类型限制。通过全局异常处理可以对自定义的异常类型进行异常处理,并向用户返回相应的异常信息。对图片设置唯一的文件名,避免中文访问异常。此外在Liunx服务器上要设置图片上传的固定地址,这样在路径映射后可以直接通过url访问。

liunx环境搭建及jar包部署

环境搭建过程中,JDK安装完成后,要注意设置全局变量,这样才能在liunx服务器的任意位置访问。tomcat安装后,要关闭liunx服务器防火墙,用户才可以外部访问tomcat。mysql安装完成后,要设置mysql中root的访问ip为%,关闭端口的防火墙,以及开启服务器端口安全组,这样就可以通过navicat直接访问。redis安装后,要修改配置文件,开启守护进程,这样才能后台运行。使用nohup后台部署jar包,

参考文献、参考博客

...全文
1978 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

142

社区成员

发帖
与我相关
我的任务
社区描述
2022年福大-软件工程;软件工程实践-W班
软件工程 高校
社区管理员
  • FZU_SE_teacherW
  • 丝雨_xrc
  • Lyu-
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧