SpringBoot part4 day07

1 实现图片的回显

1.1实现文件的上传

1.1.1为属性赋值
编辑pro文件
在这里插入图片描述

#配置本地磁盘根路径
image.localDirPath=D:/tena/images
#配置图片服务器地址
image.urlPath=http://image.jt.com

在这里插入图片描述
重构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.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{
    //定义图片类型
    private static Set<String> imageTypeSet=new HashSet<>();
    @Value("${image.localDirPath}")
    private String localDirPath;//="D:/tena/images";//定义本地磁盘目录
    @Value("${image.urlPath}")
    private String urlPath;

    static{
        imageTypeSet.add(".jpg");
        imageTypeSet.add(".png");
        imageTypeSet.add(".gif");

    }
    /**
     * 1.检验图片的有效性
     * 2.检验图片是否为恶意程序
     * 3.提高用户检索图片的效率
     * 4.为了防止重名图片的提交
     * 5.实现图片的物理上传
     * 6.准备访问的虚拟路径
     * */

    @Override
    public ImageVo upload(MultipartFile uploadFile) {
        //1.校验图片类型 1.利用正则表达式校验  2.利用集合的方式进行校验 Set  数据是否存在即可
        //1.1 获取图片名称 abc.jpg
        String fileName = uploadFile.getOriginalFilename();
        fileName = fileName.toLowerCase();//将所有字母转化为小写
        //1.2获取图片的类型
        int index=fileName.lastIndexOf(".");
        String fileType = fileName.substring(index);

        if(!imageTypeSet.contains(fileType)){//如果类型不匹配
            return ImageVo.fail();//图片上传失败
        }
        //2.如何判断文件是狗为恶意程序????
        //2.1将上传的文件类型利用图片的api进行转化 如果转化不成功则一i的那个不为图片
        try {
            BufferedImage bufferedImage = ImageIO.read(uploadFile.getInputStream());
            //2.2校验是否有图片的特有属性,高度和宽度
            int width = bufferedImage.getWidth();
            int height = bufferedImage.getHeight();
            //2.3校验宽度和高度是否有值
            if(width == 0 || height == 0 ){
                return ImageVo.fail();
            }

        } catch (IOException e) {
            e.printStackTrace();
            return ImageVo.fail();//返回失败
        }
        //3.实现分目录存储
        // 方案1:利用hash之后每隔2-3位截取之后拼接
        //方案2:以时间为单位进行分割  /yyyy/MM/dd/
        //3.1利用工具的API将时间转化为指定的格式
        String datePath = new SimpleDateFormat("/yyyy/MM/dd/").format(new Date());
        //3.2 动态生成文件的目录  根目录+时间目录
        String localDir = localDirPath + datePath;

        //3.3pa判断目录是否存在,如果不存在,则创建
        File dirFile = new File(localDir);
        if(!dirFile.exists()){
            dirFile.mkdirs();
        }
        //4.防止文件重名,需要自定义文件名称 UUID
        //4.1生成UUID
        String uuid= UUID.randomUUID().toString().replace("-","");
        //4.2动态生成文件名称 uuid.jpg
        String uuidFileName = uuid + fileType;

        //5.实现文件的上传 准备文件的全路径
        String realFilePath = localDir + uuidFileName;
        //5.1封装文件的真实对象
        File imageFile = new File(realFilePath);
        //5.2实现文件的上传
        try {
            uploadFile.transferTo(imageFile);
        } catch (IOException e) {
            e.printStackTrace();
            return ImageVo.fail();
        }
        //6.暂时使用京东的路径
        //检查文件上传业务调用是否正确
        String url = urlPath + datePath + uuidFileName;
        return ImageVo.success(url);
    }
}


上传图片后测试:
在这里插入图片描述

将请求路径改为本地具体磁盘地址:
在这里插入图片描述

2.反向代理

2.1反向代理概念

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
特点:
1.反向代理服务器是位于用户和目标服务器之间的.
2. 用户以为反向代理服务器就是真实的服务器. 用户不知道真实的服务器到底是谁.
3. 反向代理服务器保护服务端信息,称之为服务器端代理.
代理存在的原因: 用户由于某种原因无法直接访问目标服务器,完成指定的功能.
在这里插入图片描述
在这里插入图片描述

2.2正向代理

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

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

2.3关于代理的总结

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

3.Nginx

3.1下载安装

在这里插入图片描述
下载并解压
在这里插入图片描述
在这里插入图片描述
F5 硬件负载均衡 每秒百万级别的访问量
Nginx 软件负载均衡 理想环境下5万每秒,实际2-4万每秒

3.2Nginx介绍(C开发)

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

3.3Nginx安装使用

在这里插入图片描述
在这里插入图片描述
访问网址: localhost:80
在这里插入图片描述
关于nginx 进程项说明
Nginx每次启动时会生成2个进程项
1).主进程: 主要提供nginx反向代理服务的. 再关闭主进程 内存大
2).守护进程 防止主进程意外关闭的. 先关闭守护进程 内存小
如果需要关闭nginx,则应该先关闭守护进程,再关闭主进程.

3.4Nginx命令

工作目录说明:要求再nginx.exe所在根目录中执行
启动命令 start nginx
重启命令 nginx -s reload
关闭命令 nginx -s stop

3.5Nginx反向代理的原理

在这里插入图片描述
只能拦截http请求
在这里插入图片描述

http{
  server{   #服务1
     listen 80;
     server_name localhost;
     location /{
         root html;
         root D:/tena/images
         index index.html
      }
     
   }

   server{   #服务2
     listen 80; #端口不能改变
     server_name XXXXXXXX; #服务名称不能重复
     location /{
         root html;
         root D:/tena/images
         index index.html
      }
     
   }
}

3.6图片的回显

3.6.1需求
实现图片地址的代理,将图片地址转向到具体的磁盘路径.
URL地址: http://image.jt.com/2020/12/02/7d7179100d1e423abc2546e77743947c.png
本地磁盘地址: D:\JT-SOFT\images/2020/12/02/7d7179100d1e423abc2546e77743947c.png
在这里插入图片描述
本地磁盘路径:
在这里插入图片描述
修改nginx根目录下的conf中的nginx.conf文件
HTTPS协议端口号443 http协议端口号80
在这里插入图片描述
若修改文件时有错误,执行nginx -s reload会报错
在这里插入图片描述

3.5HOSTS文件的修改

在这里插入图片描述
host文件只对本机有效
在这里插入图片描述
SwitchHost 是用来操作Host文件的
在这里插入图片描述
在这里插入图片描述

# 京淘配置   
# 左侧写IP地址 右侧写域名  中间使用空格分割
127.0.0.1 image.jt.com
127.0.0.1 manager.jt.com
127.0.0.1 www.jt.com
127.0.0.1 sso.jt.com
127.0.0.1 localhost

在这里插入图片描述
测试图片回显功能:
在这里插入图片描述

3.6实现域名的代理

3.6.1需求说明
需求:通过http://manager.jt.com进行访问localhost:8091服务器
实现方式:利用反向代理的方式实现
更改Nginx的配置文件

 server{
     listen 80;
     server_name manager.jt.com;
     location / {
        #发起url请求地址
        proxy_pass http://localhost:8091;
     }
    }

在这里插入图片描述

4.Nginx实现Tomcat集群部署

4.1负载均衡原理

在这里插入图片描述

4.2动态展现端口号

新增Controller

package com.jt.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class PortController {
    @Value("${server.port}")
    private String port;
    @RequestMapping("/getPort")
    public String getPort(){
        return "当前访问端口号:"+port;

    }



}

在这里插入图片描述

4.3项目打包

需要准备三台Tomcat服务器,所以端口号依次为8081/8082/8083
clean—compile—install
在这里插入图片描述
准备三个war包:
在这里插入图片描述
运行三个Tomcat窗口
在这里插入图片描述
运行测试:
在这里插入图片描述

4.4负载均衡的实现

4.4.1轮询策略
说明:根据配置文件的顺序依次访问服务器
在这里插入图片描述
修改后保存配置文件,重启Nginx服务器,访问测试
在这里插入图片描述
轮流出现端口号8081/8082/8083
4.4.2权重策略
说明:让性能更优的服务器处理更多的用户请求
在这里插入图片描述
4.4.3 IPHash策略
需求:需要将用户与某台服务器绑定(客服,考试时间,考题)
在这里插入图片描述
访问测试只有第一个8081端口
iphash原理
在这里插入图片描述
缺点:
1.容易造成负载不均现象
2.用户与服务器进行绑定,当服务器宕机时则可能影响用户的使用
IPhash使用场景:压力测试时使用

4.5Nginx高级属性

4.5.1down属性
在这里插入图片描述
4.5.2backup属性
备用机的设定,一般条件下备用机不干活,但是当主机遇忙时或者主机宕机时才运行
在这里插入图片描述
4.5.3tomcat服务器的高可用
在这里插入图片描述
8081宕机,每次访问都会耗大量时间去寻找可用服务
在这里插入图片描述

5 虚拟机介绍

桥接模式

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值