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

實現遠程鏈接動態效果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章