@TOC
springboot568医院病历管理系统--论文
第1章 绪 论
通过对现阶段医院病历管理方式的背景进行研究,阐述研究目的与意义,以及对国内外现状进行研究,经过一系列研究来确定该系统研发的意义与价值,该部分为系统研发的起点。
1.1 研究背景
现在医院病历的管理过于麻烦,管理者需要通过手抄等方式进行记录,大大降低了工作效率[1]。本系统以最大限度的实现了与数据库管理系统软件这间的配合,基本上满足了大部分用户的需求,便于用户。人们对计算机技术的应用相对成熟,发达的计算机技术构成人们走向高科技的桥梁,可以有效的解决和获取信息,实现一套完整的管理系统帮助用户提高工作效率。
1.2 研究的目的与意义
医院病历管理系统实现的目的在于其可以改变传统的医院病历管理方式,通过管理系统可以减少的工作人员的工作量,把时间利用的更加充分。实现更为高效的管理模式,这也是对系统不可缺少的一部分。在用户进入系统的时候,输入关键词快速搜索,节省用户时间,使用户快速查找相应的信息进行处理,从而提高用户心目中的满意度。要想使人们在现代生活环境下得以更好地发展,不仅需要抓住人们的需求、提升针对性,更需要突出自身特色,这样才能吸引用户,留住用户,让项目有更好的前景。从实质上解决医院病历管理困难的问题。
1.3 国内外研究现状
在海外,系统管理发展较快[3]。相对应的探讨和信息系统软件的开发设计和保护也有所增加[4]。伴随着時间的变化,产品研发工作中持续推动,系统软件获得了较大的发展。如今,向着智能化,数字化和信息化的方位快速发展。各大公司都使用了相似的规章制度,推动了公司的迅速发展,获得了较好的经济效益[5]。
在我国目前的管理还不够完善,因受历史环境要素的影响,发展不平衡,对医院病历的管理全部过程中应用电子计算机和网上的领域以及外部状况信息存有很大差别。技术性简易地取代了过去的形式或方式,但根据更科学的方式再次设计方案管理的这一环节中,大家必须舍弃传统的管理方式,尽早更改管理方法,变化管理理念合理操纵,使系统更细腻,控制成本、提升管理效益。
作为信息科学的媒介和关键,计算机的产生和发展对人类社会的兴盛起着关键功效。不论是政府机构或是公共机构,都会根据工作内容选一套优秀的通讯技术和专业的办公设备,使用这些技术和设备迅速地搜集、解决和储存信息,使管理工作变得方便快捷,做到科学合理的管理目标。
总而言之,医院病历管理系统的发展呈持续上升发展趋势,现在传统式的手工制作和半手动式管理方法转变为信息化管理的转变历程中,必须使用和融合全新的信息技术性来完成传统的系统设计方法,确保系统的效果和品质。
第2章 相关技术
本系统的数据库采用的是Mysql数据库,并且选择了JAVA技术开发。在项目开发过程中,实现了系统功能模块的安全性、实用性、稳定性、易维护和页面简单等特点。
2.1 Java技术
Java是由sun公司开发出来的,后来被oracle收购,前身为oak语言。后来进入90年代初始期时,互联网兴起,重新将oak语言升级改造(借鉴C++语言),最后形成了JAVA语言。JAVA在语言操作时,大部分就只有一种操作方式,并且支持跨平台,即使是在一个操作系统平台下开发,也可以运行在所有操作系统平台中,其编程的本质也是由数据结构和算法构成。
2.2 Spring Boot框架
本技术是Java平台的开源应用框架,其目的地简单化Spring的初始搭建和开发的过程。默认配置了很多框架的使用方式,自动加载Jar包,为了让用户尽可能快的跑起来spring应用程序。
Springboot的主要优点有:1.为所有Spring开发提供了一个更快、更广泛的入门体验;2.零配置;3.集成了大量常用的第三方库的配置;4.提供准备好的特性。当今,Java领域开发者几乎都在使用Springboot,在开发领域逐渐成为领导者。Spring Boot框架的核心就是自动配置,只要存在相应的jar包,Spring就帮我们自动配置。如果默认配置不能满足需求,我们还可以替换掉自动配置类,使用我们自己的配置。另外,Spring Boot还集成了嵌入式的Web服务器,系统监控等很多有用的功能。
2.3 MySQL数据库
MySQL是一个多用户、多线程的SQL数据库服务器。MySQL不仅仅能够有效地对数据库的数据进行增、删、改、查,还可以做其他更多的事情[7]。MySQL是关系型数据库操作的基本操作语言,它可以保存实体之间的关系,即存储数据,比如用来存储用户、商品或订单,所以特别适合那些数据库和网站开发背景的工作。
MySQL数据库特点:
(1)保证源代码编译器的可移植性和灵活性。
(2)支持多种操作系统包括AIX、FreeBSD、HP-UX、Linux和Mac OS、Novell‘s Netware、OpenBSD系统、OS/2卷、Solaris、Windows等。
(3)提供不同编程语言的接口,C、C++、Python和PHP、Perl、PHP、Ruby等编程语言。
(4)支持使用CPU资源的多线程。
(5)查询速度快。算法优化了查询语句,可靠地提高了搜索速度。
(6)MySQL语言灵活。作为嵌入式语言能够嵌入到其他语言程序中,它的语法结构基本一致,提供了极大的灵活性和方便性[14]。
(7)高度非过程化。在访问数据库时,没有必要一步一步向计算机发送指令去完成任务,只需要用MySQL语句描述并且命令就可以了,数据库会自动完成全部工作。
2.4 系统运行环境
本系统是一个B/S版的应用程序,需要在服务器上部署MySQL数据库,其他的客户端通过运行程序既可。
(1)硬件平台:
CPU:酷睿i3 -3.0GHZ
运行内存:4G以上
电脑硬盘:128GB
(2)系统运行平台:
操作系统:Windows 7
开发工具:idea
数据库:MySQL
2.5 本章小结
本章节对医院病历管理系统进行了相关技术的分析与介绍,在结合技术的优点和适应性来选择数据库、服务器和开发环境,基于现有的情况,针对系统的各个模块确定系统的最优设计方案。
第3章 系统分析
需求分析是研发人员经过调研和分析后准确理解客户需求,确定系统需要具备的功能。然后对系统进行可行性和功能分析,确保符合医院病历管理系统的实现价值,对后续的系统创建有显著的帮助。
3.1 系统需求分析
研发该系统时,需要明确一些数据,主要包括人员信息、医院病历信息等。人员信息包括病人信息、医生信息和管理员信息;医院病历信息主要是住院信息管理、出院信息、病历信息和科室等信息。
系统使用权限分别包括管理员、病人和医生,其中管理员拥有着最大的权限,同时管理员的功能模块也是最多的,管理员可以对系统上所有信息进行管理。用户可以修改个人信息,对医院病历信息进行查询,对住院信息进行添加、修改或删除等;研发该系统要站在医生和病人的角度思考,实现用户需要的全部功能需求,并且使用起来方便快捷,易于操作[7]。
3.2 系统可行性分析
开发一套完整的系统需要花费大量的资源,所以在做系统之前我们要进行充分的可行性分析,从而得到最佳的选择。在做系统的过程中需要大量的人手、资源、材料和工具,同时还要考虑各种情况,要做一些准备工作,以及本系统能否带来同等价值的收益[8]。
经过分析可以确定此系统能够带来收益,此系统由个人开发,使用Apache服务器,MySQL数据库和JAVA技术相结合,所使用的服务器都是免费的,无需花费任何费用,仅需一台可以安装这几款软件的电脑就可以完成整套系统。
此系统任何人都可以使用,哪怕对代码完全不懂,只会电脑的基础操作并且安装这几款软件就可以对本系统进行操作,实现了人员使用方面的自由,不必有过多的限制。
3.3 系统流程分析
操作流程需要进行设计,一个完整的系统可以流畅的操作下来是至关重要的,本系统的完整操作流程如图3-1所示:
图3-1系统操作流程图
本系统主要有管理员、病人和医生三种角色,进行登录时需要确保输入的内容与已经保存的账号信息一致,通过账户密码等方式来校验用户信息,输入正确则登入系统,输入错误则登入失败。系统登录流程,如图3-2所示:
图3-2系统登录流程图
在添加信息的时候,会判断是哪类用户,并根据用户类型判断执行是否合法,合法者可以进行添加,不合法者则不能进行此操作[12]。管理员登录账号后可以对内容进行添加,拥有着最高的权限,用户权限次于管理员。添加信息流程图如图3-3所示:
图3-3系统添加流程图
删除数据时与添加数据功能类似,删除数据具体流程如图3-4所示:
图3-4系统删除流程图
3.4 本章小结
系统分析主要是需求分析,研发人员根据调研结果,编写一套完整的医院病历管理系统,通过可行性分析对系统进行简单的设计,构建出大致内容,最后对系统流程进行分析,得出该系统完美地实现了现阶段医院病历管理的全部内容,符合用户要求并迎合市场,为下一章系统的整体设计提供了基础。 34
第4章 系统设计
用流程图和图片的方法直观的展示出系统的整体结构和流程的设计思路,并详细阐述出系统功能模块。数据库的构造是使用E-R图画出各个实体之间的关系,并确定各个数据表之间的关系。
4.1 系统功能模块设计
4.1.1 登录模块设计
医院病历管理系统根据不同的权限可划分为不同的角色,分别是管理员、病人和医生。该系统已存在的用户,在登录系统时需要填写相应的账户信息,登录时应注意输入的账户密码,角色也要在登录时进行选择,登陆成功后会根据不同角色进入相对应的页面。
页面主要包含用户名和密码,都是必填项。如果某项为空并点击登录按钮,会提示请输入为空的项[13]。系统主要分为两个角色进行登录,通过不要通的角色选择输入不同的账号密码,输入正确则登陆成功,如果登录的用户名和角色与数据库内的数据不匹配则报错。
这个模块处理用户的登录请求,请求后会调用特定的方法,通过处理登录信息来实现登录业务。系统会将获取到的请求下发到逻辑层,逻辑层将数据封装成相应对象,然后调用响应层获取结果并将信息返回给页面[14]。
4.1.2 管理员管理模块设计
管理员是用户管理模块中权限最高的,管理员可以对用户信息进行操作、可以随意的添加用户信息、可以及时的更新用户信息、也可以直接新增用户和删除用户。
4.1.3 医生模块设计
医生功能模块由个人中心、病人管理、住院信息管理、出院信息管理、病历信息管理等功能组成。能对自己的个人信息和密码进行修改,修改前需要先成功登录本系统。
4.1.4 病人模块设计
病人功能模块由个人中心、住院信息管理、出院信息管理、病历信息管理等功能组成。能对自己的个人信息和密码进行修改,修改前需要先成功登录本系统。
4.2 系统总体设计
能够登录本系统的一共有三种角色,分别是管理员、病人和医生。登录系统后,不同的角色可以对系统进行不同的操作,管理员拥有最大的权限。系统总体结构如图4-1所示。
图4-1系统总体结构图
4.3 数据库设计
该系统使用免费开源的MySQL数据库,这是一个功能齐全的关系数据库管理系统。系统使用Navicat管理数据库。系统数据库统一使用UTF-8,避免了中文的乱码问题。MYSQL数据库一直以来都是被广泛应用的存在,它能为系统带来简洁的SQL书写以及良好的存储环境,它对分库分区有很大的帮助以减轻单表数据太多带来的压力。根据系统的实体,分析数据库之间的关系,总结出E-R图如所示:
病历信息实体属性图如下所示:
图4-2病历信息实体属性图
住院信息实体属性图如下所示:
图4-3住院信息实体属性图
出院信息实体属性图如下所示:
图4-4出院信息实体属性图
医院病历的管理中的数据由多个表组成,每个表都有对应的字段,操作该系统时,使用到的功能需要进行数据存储,这时数据将会在表中相应的字段里更新内容,并进行保存。该管理系统中共包含的表具体如下:
表名4-1:病历信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
binglibianhao | varchar | 200 | 病历编号 | ||
bingrenzhanghao | varchar | 200 | 病人账号 | ||
bingrenxingming | varchar | 200 | 病人姓名 | ||
yishenggonghao | varchar | 200 | 医生工号 | ||
keshi | varchar | 200 | 科室 | ||
yishengxingming | varchar | 200 | 医生姓名 | ||
xianbingshi | varchar | 200 | 现病史 | ||
jiwangshi | varchar | 200 | 既往史 | ||
yaominshi | varchar | 200 | 药敏史 | ||
zhenduan | longtext | 4294967295 | 诊断 | ||
zhiliaofangan | longtext | 4294967295 | 治疗方案 | ||
yizhu | longtext | 4294967295 | 医嘱 | ||
bingliwenjian | longtext | 4294967295 | 病历文件 | ||
dengjishijian | datetime | 登记时间 |
表名4-2:住院信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
bingrenzhanghao | varchar | 200 | 病人账号 | ||
bingrenxingming | varchar | 200 | 病人姓名 | ||
bingrenshouji | varchar | 200 | 病人手机 | ||
jiatingzhuzhi | varchar | 200 | 家庭住址 | ||
xingbie | varchar | 200 | 性别 | ||
nianling | varchar | 200 | 年龄 | ||
ruzhushijian | datetime | 入住时间 | |||
ruzhuyuanyin | longtext | 4294967295 | 入住原因 | ||
yishenggonghao | varchar | 200 | 医生工号 | ||
yishengxingming | varchar | 200 | 医生姓名 | ||
lianxidianhua | varchar | 200 | 联系电话 | ||
chuyuanzhuangtai | varchar | 200 | 出院状态 | ||
bingfanghao | varchar | 200 | 病房号 |
表名4-3:医生
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
yishenggonghao | varchar | 200 | 医生工号 | ||
mima | varchar | 200 | 密码 | ||
yishengxingming | varchar | 200 | 医生姓名 | ||
keshi | varchar | 200 | 科室 | ||
zhicheng | varchar | 200 | 职称 | ||
xingbie | varchar | 200 | 性别 | ||
yiling | varchar | 200 | 医龄 | ||
lianxidianhua | varchar | 200 | 联系电话 | ||
touxiang | longtext | 4294967295 | 头像 |
表名4-4:用户表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
username | varchar | 100 | 用户名 | ||
password | varchar | 100 | 密码 | ||
role | varchar | 100 | 角色 | 管理员 | |
addtime | timestamp | 新增时间 | CURRENT_TIMESTAMP |
表名4-5:token表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
userid | bigint | 用户id | |||
username | varchar | 100 | 用户名 | ||
tablename | varchar | 100 | 表名 | ||
role | varchar | 100 | 角色 | ||
token | varchar | 200 | 密码 | ||
addtime | timestamp | 新增时间 | CURRENT_TIMESTAMP | ||
expiratedtime | timestamp | 过期时间 | CURRENT_TIMESTAMP |
表名4-6:科室
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
keshi | varchar | 200 | 科室 |
表名4-7:配置文件
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
name | varchar | 100 | 配置参数名称 | ||
value | varchar | 100 | 配置参数值 |
表名4-8:出院信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
bingrenzhanghao | varchar | 200 | 病人账号 | ||
bingrenxingming | varchar | 200 | 病人姓名 | ||
bingrenshouji | varchar | 200 | 病人手机 | ||
jiatingzhuzhi | varchar | 200 | 家庭住址 | ||
xingbie | varchar | 200 | 性别 | ||
nianling | varchar | 200 | 年龄 | ||
chuyuanshijian | datetime | 出院时间 | |||
shentiqingkuang | longtext | 4294967295 | 身体情况 | ||
yishenggonghao | varchar | 200 | 医生工号 | ||
yishengxingming | varchar | 200 | 医生姓名 | ||
lianxidianhua | varchar | 200 | 联系电话 |
表名4-9:病人
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
bingrenzhanghao | varchar | 200 | 病人账号 | ||
mima | varchar | 200 | 密码 | ||
bingrenxingming | varchar | 200 | 病人姓名 | ||
xingbie | varchar | 200 | 性别 | ||
nianling | varchar | 200 | 年龄 | ||
touxiang | longtext | 4294967295 | 头像 | ||
bingrenshouji | varchar | 200 | 病人手机 | ||
shenfenzheng | varchar | 200 | 身份证 | ||
jiatingzhuzhi | varchar | 200 | 家庭住址 |
4.4 本章小结
对系统的结构和流程设计完成后使其有一个框架,再对主要功能模块进行设计,并对功能描述、输入项、输出项和实现方法进行了详细描述。绘制出系统的E-R图,可以更直观地表达实体之间的关系。通过表字段之间的关系对数据库进行设计。系统的详细设计完成后,为下一章的操作做了很好的铺垫。
第5章 系统实现
在医院病历管理系统的生命周期中,经过了系统分析、系统设计等阶段之后,便开始了系统实施阶段。系统的实现主要对管理员、病人和医生功能的实现,通过实现的过程对代码和逻辑进行相应的修改和完善。该模块也是直接面对使用者的,不仅功能要齐全,而且要做到页面美观。
5.1系统登录实现
系统登录,在登录页面选择需要登录的角色,在正确输入用户名和密码后,进入操作系统进行操作;如图5-1所示。
图5-1 系统登录界面
5.2管理员模块实现
管理员进入主页面,主要功能包括对系统首页、个人中心、病人管理、医生管理、住院信息管理、出院信息管理、病历信息管理、科室管理等进行操作。管理员主页面如图5-2所示:
图5-2 管理员主界面
管理员点击病人管理。在病人页面输入病人账号进行查询、新增或删除病人列表,并根据需要对病人详情信息进行详情、修改或删除操作;如图5-3所示:
图5-3病人管理界面
管理员点击医生管理。在医生页面输入医生工号、医生姓名、选择科室和职称进行查询、新增或删除医生列表,并根据需要对医生详情信息进行详情、修改或删除操作;如图5-4所示:
图5-4医生管理界面
管理员点击住院信息管理。在住院信息页面输入病人姓名和选择出院状态进行查询、新增或删除住院信息列表,并根据需要对住院详情信息进行详情、修改或删除操作;如图5-5所示:
图5-5住院信息管理界面
5.3病人管理实现
病人进入系统可以对个人中心、住院信息管理、出院信息管理、病历信息管理等功能进行操作。病人主页面如图5-6所示:
图5-6病人主界面
5.4医生管理实现
医生进入系统可以对个人中心、病人管理、住院信息管理、出院信息管理、病历信息管理等功能进行操作。医生主页面如图5-7所示:
图5-7 医生主界面
医生点击住院信息管理。在住院信息页面输入病人姓名和选择出院状态进行查询、新增或删除住院信息列表,并根据需要对住院详情信息进行详情、出院登记、病历登记、修改或删除操作;如图5-8所示:
图5-8住院信息管理界面
5.5 本章小结
各个功能模块的实现主要是通过管理员功能、病人功能和医生功能来对系统进行操作。不同的模块来实现医院病历管理中不同的场景,确保符合现实逻辑,满足使用者的全部需求。各功能模块间的数据存储通过数据表之间的关联来实现,确保数据的准确性,满足系统的安全性。
MD5Util.java
package com.utils;
import cn.hutool.crypto.digest.DigestUtil;
public class MD5Util {
/**
* @param text明文
* @param key密钥
* @return 密文
*/
// 带秘钥加密
public static String md5(String text) {
// 加密后的字符串
String md5str = DigestUtil.md5Hex(text);
return md5str;
}
}
ChuyuanxinxiServiceImpl.java
package com.service.impl;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.List;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.utils.PageUtils;
import com.utils.Query;
import com.dao.ChuyuanxinxiDao;
import com.entity.ChuyuanxinxiEntity;
import com.service.ChuyuanxinxiService;
import com.entity.vo.ChuyuanxinxiVO;
import com.entity.view.ChuyuanxinxiView;
@Service("chuyuanxinxiService")
public class ChuyuanxinxiServiceImpl extends ServiceImpl<ChuyuanxinxiDao, ChuyuanxinxiEntity> implements ChuyuanxinxiService {
@Override
public PageUtils queryPage(Map<String, Object> params) {
Page<ChuyuanxinxiEntity> page = this.selectPage(
new Query<ChuyuanxinxiEntity>(params).getPage(),
new EntityWrapper<ChuyuanxinxiEntity>()
);
return new PageUtils(page);
}
@Override
public PageUtils queryPage(Map<String, Object> params, Wrapper<ChuyuanxinxiEntity> wrapper) {
Page<ChuyuanxinxiView> page =new Query<ChuyuanxinxiView>(params).getPage();
page.setRecords(baseMapper.selectListView(page,wrapper));
PageUtils pageUtil = new PageUtils(page);
return pageUtil;
}
@Override
public List<ChuyuanxinxiVO> selectListVO(Wrapper<ChuyuanxinxiEntity> wrapper) {
return baseMapper.selectListVO(wrapper);
}
@Override
public ChuyuanxinxiVO selectVO(Wrapper<ChuyuanxinxiEntity> wrapper) {
return baseMapper.selectVO(wrapper);
}
@Override
public List<ChuyuanxinxiView> selectListView(Wrapper<ChuyuanxinxiEntity> wrapper) {
return baseMapper.selectListView(wrapper);
}
@Override
public ChuyuanxinxiView selectView(Wrapper<ChuyuanxinxiEntity> wrapper) {
return baseMapper.selectView(wrapper);
}
}
FileController.java
package com.controller;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.UUID;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.entity.EIException;
import com.service.ConfigService;
import com.utils.R;
/**
* 上传文件映射表
*/
@RestController
@RequestMapping("file")
@SuppressWarnings({"unchecked","rawtypes"})
public class FileController{
@Autowired
private ConfigService configService;
/**
* 上传文件
*/
@RequestMapping("/upload")
@IgnoreAuth
public R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {
if (file.isEmpty()) {
throw new EIException("上传文件不能为空");
}
String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
File path = new File(ResourceUtils.getURL("classpath:static").getPath());
if(!path.exists()) {
path = new File("");
}
File upload = new File(path.getAbsolutePath(),"/upload/");
if(!upload.exists()) {
upload.mkdirs();
}
String fileName = new Date().getTime()+"."+fileExt;
File dest = new File(upload.getAbsolutePath()+"/"+fileName);
file.transferTo(dest);
/**
* 如果使用idea或者eclipse重启项目,发现之前上传的图片或者文件丢失,将下面一行代码注释打开
* 请将以下的"D:\\springbootq33sd\\src\\main\\resources\\static\\upload"替换成你本地项目的upload路径,
* 并且项目路径不能存在中文、空格等特殊字符
*/
// FileUtils.copyFile(dest, new File("D:\\springbootq33sd\\src\\main\\resources\\static\\upload"+"/"+fileName)); /**修改了路径以后请将该行最前面的//注释去掉**/
if(StringUtils.isNotBlank(type) && type.equals("1")) {
ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
if(configEntity==null) {
configEntity = new ConfigEntity();
configEntity.setName("faceFile");
configEntity.setValue(fileName);
} else {
configEntity.setValue(fileName);
}
configService.insertOrUpdate(configEntity);
}
return R.ok().put("file", fileName);
}
/**
* 下载文件
*/
@IgnoreAuth
@RequestMapping("/download")
public ResponseEntity<byte[]> download(@RequestParam String fileName) {
try {
File path = new File(ResourceUtils.getURL("classpath:static").getPath());
if(!path.exists()) {
path = new File("");
}
File upload = new File(path.getAbsolutePath(),"/upload/");
if(!upload.exists()) {
upload.mkdirs();
}
File file = new File(upload.getAbsolutePath()+"/"+fileName);
if(file.exists()){
/*if(!fileService.canRead(file, SessionManager.getSessionUser())){
getResponse().sendError(403);
}*/
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", fileName);
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
}
} catch (IOException e) {
e.printStackTrace();
}
return new ResponseEntity<byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
404.vue
<template>
<div class="content">
<img class="backgroud" src="@/assets/img/404.png" alt>
<div class="text main-text">出错了...页面失踪了</div>
<div>
<el-button class="text" @click="back()" type="text" icon="el-icon-back">返回</el-button>
</div>
</div>
</template>
<script>
export default {
methods: {
back() {
window.history.length > 1 ? this.$router.go(-1) : this.$router.push("/");
}
}
};
</script>
<style lang="scss" scoped>
.content {
display: flex;
align-items: center;
flex-direction: column;
width: 100%;
height: 100%;
min-height: 900px;
text-align: center;
.backgroud {
display: inline-block;
width: 200px;
height: 200px;
margin-top: 80px;
}
.main-text{
margin-top: 80px;
}
.text {
font-size: 24px;
font-weight: bold;
color: #333;
}
}
</style>