cgb2008-京淘day07

1. 实现文件上传

1.1 为属性赋值

1.1.1 编辑pro配置文件

在这里插入图片描述

1.1.2 为属性赋值

在这里插入图片描述

1.1.3 重构FileService

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.*;
import java.awt.datatransfer.FlavorEvent;
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(value = "classpath:/properties/image.properties",
                encoding = "UTF-8") //将配置文件导入容器
public class FileServiceImpl implements FileService{

    @Value("${image.fileDir}")
    private String fileDir;     // = "D:/JT-SOFT/images";
    @Value("${image.urlPath}")
    private String urlPath;     //设定域名地址

    private static Set<String> typeSet = new HashSet<>();
    static {
        //利用配置文件动态将图片类型获取.
        typeSet.add(".jpg");
        typeSet.add(".png");
        typeSet.add(".gif");
    }


    /**
     * 业务逻辑:实现文件上传
     * 步骤:
     *      1.校验图片的类型  jpg|png|gif.......
     *      2.校验文件是否为恶意程序...
     *      3.采用分目录的结构进行存储
     *      4.避免文件重名  UUID
     *
     * 考题: UUID有多少种排列组合? 32位16进制数.... 0-9 A-F   2^4*32 2^128   hash碰撞
     *       hash取值有多少种可能性? 8位16进制数    2^32
     *
     * @param uploadFile
     * @return
     */
    @Override
    public ImageVO upload(MultipartFile uploadFile){
        //一. 校验图片类型  1.利用集合校验   2.正则表达式
        //1.1 获取文件名称  1.jpg  1.JPG
        String fileName = uploadFile.getOriginalFilename();
        fileName = fileName.toLowerCase();
        int index = fileName.lastIndexOf(".");
        //1.2 获取下标 获取文件后缀类型
        String fileType = fileName.substring(index);
        //1.3 判断是否为图片类型
        if(!typeSet.contains(fileType)){
            return ImageVO.fail();
        }

        //二.如果是图片  高度/宽度
        //2.1将数据转化为图片对象
        try {
            BufferedImage bufferedImage =
                    ImageIO.read(uploadFile.getInputStream());
            int width  = bufferedImage.getWidth();
            int height = bufferedImage.getHeight();

            if(width == 0 || height == 0){
                return ImageVO.fail();
            }

            //三 实现分目录存储
            //3.1按照/yyyy/MM/dd/的方式进行目录划分
            String dateDir = new SimpleDateFormat("/yyyy/MM/dd/")
                             .format(new Date());
            //D:/JT-SOFT/images/2020/12/1/
            String fileDirPath = fileDir + dateDir;
            File dirFile = new File(fileDirPath);
            //3.2 创建目录
            if(!dirFile.exists()){
                dirFile.mkdirs();
            }

            //四. 实现文件上传 20-18-3.3
            //4.1 准备文件名称  UUID  522f88bb-33b2-11eb-93fb-00d861eaf238
            String uuid = UUID.randomUUID()
                          .toString().replace("-", "");
            //4.2 动态生成文件名称  uuid.jpg
            String uuidName = uuid + fileType;

            //4.3 实现文件上传  D:\JT-SOFT\images\2020\12\02\a.jpg
            File realFile = new File(fileDirPath+uuidName);
            uploadFile.transferTo(realFile);

            //本地磁盘地址:       D:\JT-SOFT\images\2020\12\02\a.jpg
            //网络访问虚拟地址:   http://image.jt.com\2020\12\02\a.jpg
            String url =  urlPath + dateDir + uuidName;
            return ImageVO.success(url, width,height);

        } catch (IOException e) {
            e.printStackTrace();
            return ImageVO.fail(); //报错返回
        }
    }
}

1.1.4 代码测试

1.上传图片之后 文件上传的路径.
在这里插入图片描述
2.将请求的前缀修改为具体磁盘地址
切换前缀,检查文件是否正常
在这里插入图片描述

2. 反向代理

2.1 反向代理概念

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。 [1]

特点:
1.反向代理服务器是位于用户和目标服务器之间的.
2. 用户以为反向代理服务器就是真实的服务器. 用户不知道真实的服务器到底是谁.
3. 反向代理服务器保护服务端信息,称之为服务器端代理.

代理存在的原因: 用户由于某种原因无法直接访问目标服务器,完成指定的功能.
在这里插入图片描述

2.2 正向代理

2.2.1 正向代理介绍

正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

特点:
1.代理服务器位于用户与服务器之间
2.用户请求时,非常明确目标服务器到底是谁. 服务器不清楚到底是谁访问的我.以为是代理服务器直接发起的请求.
3.正向代理服务器保护了用户的信息,所以称之为客户端代理.
在这里插入图片描述

2.2.2 关于代理总结

1.反向代理是服务器端代理. 只要用户访问服务器,其实都是反向代理机制. 实现业务调用
2.正向代理是客户端代理.主要用户上网就就使用正向代理 实现的是网络通信头 网穿工具 夜神模拟器/花生壳

2.3 Nginx

2.3.1 Nginx服务器介绍

在这里插入图片描述

2.3.2 nginx介绍

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
特点:
1.占用内存少 2M tomcat启动 200M左右
2.并发能力强 5万/秒 实际2-4万/秒

2.3.3 Nginx安装使用

1).启动Nginx nginx启动会生成2个进程项
1.主进程 主要的作用是提供反向代理服务的. 在关闭主进程 内存大的
2.守护进程 防止主进程意外关闭的. 先关闭守护
在这里插入图片描述

2.3.4 Nginx命令

工作目录说明: 要求在nginx.exe所在的根目录中执行
1.启动命令
start nginx Linux ./nginx
2.重名命令
nginx -s reload Linux: ./nginx -s reload
3.关闭命令
nginx -s stop Linux: ./nginx -s stop

2.3.5 Nginx反向代理原理

入门案例说明: http://localhost:80
在这里插入图片描述
2).配置项

	http{
		server {      #服务1
			 listen       80;
			 server_name  localhost;   
			  location / {
					#root   html;   
					root    D:/jt_images;
					index    index.html;
				}
		}
	
		server {      #服务1
			 listen       80;
			 server_name  xxxxxx;       #服务名称不能重复
			  location / {
					#root   html;   
					root    D:/jt_images;
					index    index.html;
				}
		}
	}

2.4实现图片回显

2.4.1 需求

实现图片地址的代理,将图片地址转向到具体的磁盘路径.
URL地址: http://image.jt.com/2020/12/02/7d7179100d1e423abc2546e77743947c.png
本地磁盘地址: D:\JT-SOFT\images/2020/12/02/7d7179100d1e423abc2546e77743947c.png

2.4.2 配置nginx

在这里插入图片描述

2.4.3 图片回显的原理

在这里插入图片描述

2.4.4 编辑HOSTS文件

作用: 实现本地域名与IP地址的映射
路径:
在这里插入图片描述

2.4.5 修改HOSTS文件

在这里插入图片描述
在这里插入图片描述

2.6 实现域名代理

2.6.1 需求说明

需求: 要求用户通过 http://manage.jt.com 访问localhost:8091的服务器.
实现方式: 利用反向代理机制实现

2.6.2 配置nginx

#2.配置后端服务器 manage.jt.com:80  localhost:8091
	server {
		listen 80;
		server_name manage.jt.com;

		location / {
			#发起url请求地址
			proxy_pass http://localhost:8091;
		}
	}

在这里插入图片描述

2.7 Nginx实现tomcat集群部署

2.7.1 集群搭建原理

在这里插入图片描述

2.7.2 动态展现端口号

在这里插入图片描述

2.7.3 项目打包

说明:由于需要准备3台tomcat服务器. 所以端口号依次8081/8082/8083
在这里插入图片描述
3).上传war包
在这里插入图片描述
4).项目运行

java   -jar   8081.war  

2.7 Nginx 负载均衡

2.7.1 轮询策略

说明: 根据配置文件的顺序,依次访问服务器.
在这里插入图片描述

2.7.2 权重策略

说明: 让性能更优的服务器处理更多的用户请求.
在这里插入图片描述

2.7.3 IPHASH策略

需求: 需要将用户与某台服务器进行绑定.
在这里插入图片描述
原理:
在这里插入图片描述
缺点:
1. 容易造成负载不均现象.
2. 如果IP地址与用户绑定在一起,如果tomcat服务器宕机,则直接影响用户.

IPhash实用场景:一般进行压力测试时使用.

2.8 Nginx 高级属性

2.8.1 down属性

说明:如果服务器宕机,则可以通过down属性进行标识,被标识的服务器则不会再为用户提供支持.
在这里插入图片描述

2.8.2 backup 属性

备用机的设定. 一般条件下备用机不干活的,但是当主机遇忙时,或者主机宕机时,才会访问备用机.
在这里插入图片描述

2.8.3 tomcat服务器高可用

说明:如果人为的添加down属性 效率不高, 能否自动的检测服务器是否宕机,如果宕机,能否自动的标识为down.
在这里插入图片描述

3 作业

安装远程连接工具
url地址 : https://mobaxterm.mobatek.net/download-home-edition.html

实现远程链接动态效果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_16804847/article/details/110468268