- 文件上传优化
==========
1.1 url优化
阐明: 如果须要通过网络虚构门路拜访服务器.则应该依照如下的配置实现.
- 本地磁盘门路: D:JT-SOFTimages20200930a.jpg
- 网络虚构门路: http://image.jt.com20200930a.jpg
1.2 编辑pro配置文件
1.3 实现属性的动静赋值
`package com.jt.service;import com.jt.vo.ImageVO;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.PropertySource;import org.springframework.stereotype.Service;import org.springframework.web.multipart.MultipartFile;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashSet;import java.util.Set;import java.util.UUID;@Service@PropertySource("classpath:/properties/images.properties") //容器动静加载指定的配置文件public class FileServiceImpl implements FileService{ //因为属性的值前期可能会发生变化,所以应该动静的获取属性数据. 利用pro配置文件 @Value("${image.rootDirPath}") private String rootDirPath; // = "D:/JT-SOFT/images"; @Value("${image.urlPath}") private String urlPath; // = "http://image.jt.com"; //1.2 筹备图片的汇合 蕴含了所有的图片类型. private static Set<String> imageTypeSet; static { imageTypeSet = new HashSet<>(); imageTypeSet.add(".jpg"); imageTypeSet.add(".png"); imageTypeSet.add(".gif"); } /** * 欠缺的校验的过程 * 1. 校验是否为图片 * 2. 校验是否为恶意程序 * 3. 避免文件数量太多,分目录存储. * 4. 避免文件重名 * 5. 实现文件上传. * @param uploadFile * @return */ @Override public ImageVO upload(MultipartFile uploadFile) { //0.避免有多余的空格 所以先做去空格的解决 rootDirPath.trim(); urlPath.trim(); //1.校验图片类型 jpg|png|gif..JPG|PNG.... //1.1 获取以后图片的名称 之后截取其中的类型. abc.jpg String fileName = uploadFile.getOriginalFilename(); int index = fileName.lastIndexOf("."); String fileType = fileName.substring(index); //将数据转化为小写 fileType = fileType.toLowerCase(); //1.3 判断图片类型是否正确. if(!imageTypeSet.contains(fileType)){ //图片类型不匹配 return ImageVO.fail(); } //2.校验是否为恶意程序 依据宽度/高度进行判断 try { //2.1 利用工具API对象 读取字节信息.获取图片对象类型 BufferedImage bufferedImage = ImageIO.read(uploadFile.getInputStream()); //2.2 校验是否有宽度和高度 int width = bufferedImage.getWidth(); int height = bufferedImage.getHeight(); if(width==0 || height==0){ return ImageVO.fail(); } //3.分目录存储 yyyy/MM/dd 分隔 //3.1 将工夫依照指定的格局要求 转化为字符串. String dateDir = new SimpleDateFormat("/yyyy/MM/dd/") .format(new Date()); //3.2 拼接文件存储的目录对象 String fileDirPath = rootDirPath + dateDir; File dirFile = new File(fileDirPath); //3.3 动态创建目录 if(!dirFile.exists()){ dirFile.mkdirs(); } //4.避免文件重名 uuid.jpg 动静拼接 //4.1 动静生成uuid 实现文件名称拼接 名.后缀 String uuid = UUID.randomUUID().toString().replace("-", ""); String realFileName = uuid + fileType; //5 实现文件上传 //5.1 拼接文件实在门路 dir/文件名称. String realFilePath = fileDirPath + realFileName; //5.2 封装对象 实现上传 File realFile = new File(realFilePath); uploadFile.transferTo(realFile); //实现文件上传胜利!!! http://image.jt.com20200930a.jpg String url = urlPath + dateDir + realFileName; return ImageVO.success(url,width,height); } catch (IOException e) { e.printStackTrace(); return ImageVO.fail(); } }}`
2 反向代理机制阐明
2.1 为什么须要反向代理
需要:当实现文件上传时,业务返回页面的是虚拟地址门路
url地址: http://image.jt.com/2020/09/30/a.jpg
实在图片地址: file:///D:/JT-SOFT/image/2020/09/30/d534bed912c748b0ac979ee40222490a.jpg
问题: 如何让用户通过url拜访 找到实在的磁盘地址的图片.
2.2 反向代理机制
2.2.1 反向代理介绍
反向代理服务器位于用户与指标服务器之间,然而对于用户而言,反向代理服务器就相当于指标服务器,即用户间接拜访反向代理服务器就能够取得指标服务器的资源。同时,用户不须要晓得指标服务器的地址,也毋庸在用户端作任何设定。反向代理服务器通常可用来作为Web减速,即应用反向代理作为Web服务器的前置机来升高网络和服务器的负载,进步拜访效率。
概括:
1.位于用户(客户端)-服务器之间.
2.用户拜访反向代理服务器,认为是实在的服务器信息.
3.用户基本不分明实在的服务器信息到底是谁.
4.个别反向代理机制爱护了实在的服务器信息,所以也称之为服务器端代理.
2.3 正向代理机制
2.3.1 需要引入
1.宽带: 电信运营商 账号/明码 只能被一台机器应用.
2.路由器: 在家庭的外部创立了局域网 使得局域网中的设施能够通过路由器的性能与外界通信.
2.3.2 正向代理介绍
正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器获得内容,客户端向代理发送一个申请并指定指标(原始服务器),而后代理向原始服务器转交申请并将取得的内容返回给客户端。客户端能力应用正向代理。
总结:
1.正向代理位于客户与服务器之间
2.客户端在发动申请之前 确定了指标服务器的地址.
3.服务器不分明到底是哪台客户端拜访的我,认为只是路由器拜访的.
4.正向代理爱护了客户的信息,所以也称之为 客户端代理
2.4 Nginx
2.4.1 Nginx介绍
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:)开发的,第一个公开版本0.1.0公布于2004年10月4日。
其将源代码以类BSD许可证的模式公布,因它的稳定性、丰盛的功能集、示例配置文件和低系统资源的耗费而闻名。2011年6月1日,nginx 1.0.4公布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协定下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中体现较好,中国大陆应用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
特点:
1.内存少 不超过2M tomcat服务器大概占用600M
2.并发能力强 3-5万次/秒 tomcat服务器大概 150-220之间
2.4.2 Nginx装置应用
注意事项:
- 不要将nginx放到C盘及系统目录中 留神中文门路和空格.
- nginx服务器启动的速度特地快, 窗口会闪退 只启动一次即可
- nginx启动会占用80端口.
- nginx命令的运行必须在nginx.exe所在的目录中执行.
2.4.2 Nginx命令
1).启动命令 start nginx
2).重启命令 nginx -s reload
3).进行命令 nginx -s stop
2.4.3 Nginx服务器启动项阐明
2.4.4 对于nginx反向代理阐明
`http { # 一个反向代理就是一个server server { #监听 80端口 listen 80; #监听的域名 域名不能反复. server_name localhost; #执行的反向代理的动作 / 拦挡所有的门路 location / { # root关键字 代理的是一个目录 root html; #默认跳转页面 index index.html index.htm; } }}`
2.5 Nginx实现图片回显
2.5.1 NGINX配置
`# 图片服务器代理 image.jt.com:80 server { listen 80; server_name image.jt.com; location / { # 转向目录 root D:/JT-SOFT/images; } }`
2.5.2 批改hosts文件
1.HOSTS文件的阐明:
2.HOSTS文件的地位
3).以超级管理员身份运行
`# 京淘配置 #左侧写IP地址 右侧写域名 两头应用空格分隔127.0.0.1 image.jt.com127.0.0.1 manage.jt.com#实现 nginx的#192.168.126.129 image.jt.com#192.168.126.129 manage.jt.com127.0.0.1 www.jt.com#Bug 有时在应用该软件时可能会呈现失落字母的景象.127.0.0.1 sso.jt.com`
3.nginx实现tomcat集群部署
3.1 我的项目部署
3.2 服务器反向代理
`#配置京淘后盾治理服务器 # manage.jt.com localhost:8091服务器 server { listen 80; server_name manage.jt.com; location / { #映射服务器 proxy_pass http://localhost:8091; } }`
批改nignx服务器之后,重启nginx
3.3 动静获取以后服务器端口号
`@RestControllerpublic class PortController { //从spring服务器中动静的获取端口号 @Value("${server.port}") private Integer port; @RequestMapping("/getPort") public String getPort(){ return "以后服务器拜访的端口号:"+port; }}`
3.4 我的项目打包
之后从我的项目的target目录中动静获取jar包文件 筹备集群部署.
3.4 我的项目发布命令
注意事项: 以后的命令执行 会占用dos命令窗口 打印控制台信息. 当dos命令窗口敞开 服务器进行.
退出dos命令窗口: ctrl + c
`java: java -jar 8081.war` * 1
3.4 nginx负载平衡实现
3.4.1 轮询机制
阐明: 依照配置文件的程序 顺次拜访服务器.
`#配置京淘后盾治理服务器 # manage.jt.com localhost:8091服务器 server { listen 80; server_name manage.jt.com; location / { #映射服务器 #proxy_pass http://localhost:8091; proxy_pass http://jtWindows; } } # 配置tomcat服务器集群 1.轮询策略 upstream jtWindows { #server代表服务器地址 server 127.0.0.1:8081; server 127.0.0.1:8082; }`
3.4.2 权重机制
阐明: 依照权重的设置,让性能更优的服务器多解决申请.
`# 配置tomcat服务器集群 1.轮询策略 2.权重策略 upstream jtWindows { #server代表服务器地址 server 127.0.0.1:8081 weight=8; server 127.0.0.1:8082 weight=2; }`
3.4.3 IPHASH策略(理解)
因为某些数据与服务器进行了绑定,则起初必须要求用户拜访指定的服务器时,应用IPHASH策略
`# 配置tomcat服务器集群 1.轮询策略 2.权重策略 3.iphash策略 upstream jtWindows { #server代表服务器地址 ip_hash; server 127.0.0.1:8081 weight=8; server 127.0.0.1:8082 weight=2; }`
作业
1.装置VMware虚拟机程序
2.查看网卡设置
如果没有网卡 则换一个vmwar版本装置…
- 启动Linux零碎
问题形容:
进入BIOS零碎中 开启虚拟化设置即可. 主板零碎 开机 F1/F2…