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
實作遠程鏈接動態效果

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/229258.html
標籤:其他
