1. 圖檔伺服器的安裝
1、存儲空間可擴充。
2、提供一個統一的通路方式。
使用FastDFS,分布式檔案系統。存儲空間可以橫向擴充,可以實作伺服器的高可用。支援每個節點有備份機。
1.1. 什麼是FastDFS?
FastDFS是用c語言編寫的一款開源的分布式檔案系統。FastDFS為網際網路量身定制,充分考慮了備援備份、負載均衡、線性擴容等機制,并注重高可用、高性能等名額,使用FastDFS很容易搭建一套高性能的檔案伺服器叢集提供檔案上傳、下載下傳等服務。
1.2. FastDFS架構
FastDFS架構包括 Tracker server和Storage server。用戶端請求Tracker server進行檔案上傳、下載下傳,通過Tracker server排程最終由Storage server完成檔案上傳和下載下傳。
Tracker server作用是負載均衡和排程,通過Tracker server在檔案上傳時可以根據一些政策找到Storage server提供檔案上傳服務。可以将tracker稱為追蹤伺服器或排程伺服器。
Storage server作用是檔案存儲,用戶端上傳的檔案最終存儲在Storage伺服器上,Storage server沒有實作自己的檔案系統而是利用作業系統 的檔案系統來管理檔案。可以将storage稱為存儲伺服器。
服務端兩個角色:
Tracker:管理叢集,tracker也可以實作叢集。每個tracker節點地位平等。
收集Storage叢集的狀态。
Storage:實際儲存檔案
Storage分為多個組,每個組之間儲存的檔案是不同的。每個組内部可以有多個成員,組成員内部儲存的内容是一樣的,組成員的地位是一緻的,沒有主從的概念。
1.3. 檔案上傳的流程
用戶端上傳檔案後存儲伺服器将檔案ID傳回給用戶端,此檔案ID用于以後通路該檔案的索引資訊。檔案索引資訊包括:組名,虛拟磁盤路徑,資料兩級目錄,檔案名。
n 組名:檔案上傳後所在的storage組名稱,在檔案上傳成功後有storage伺服器傳回,需要用戶端自行儲存。
n 虛拟磁盤路徑:storage配置的虛拟路徑,與磁盤選項store_path*對應。如果配置了store_path0則是M00,如果配置了store_path1則是M01,以此類推。
n 資料兩級目錄:storage伺服器在每個虛拟磁盤路徑下建立的兩級目錄,用于存儲資料檔案。
n 檔案名:與檔案上傳時不同。是由存儲伺服器根據特定資訊生成,檔案名包含:源存儲伺服器IP位址、檔案建立時間戳、檔案大小、随機數和檔案拓展名等資訊。
1.4. 檔案下載下傳
1.5. 最簡單的FastDFS架構
1. 圖檔伺服器的安裝
1、存儲空間可擴充。
2、提供一個統一的通路方式。
使用FastDFS,分布式檔案系統。存儲空間可以橫向擴充,可以實作伺服器的高可用。支援每個節點有備份機。
1.1. 什麼是FastDFS?
FastDFS是用c語言編寫的一款開源的分布式檔案系統。FastDFS為網際網路量身定制,充分考慮了備援備份、負載均衡、線性擴容等機制,并注重高可用、高性能等名額,使用FastDFS很容易搭建一套高性能的檔案伺服器叢集提供檔案上傳、下載下傳等服務。
1.2. FastDFS架構
FastDFS架構包括 Tracker server和Storage server。用戶端請求Tracker server進行檔案上傳、下載下傳,通過Tracker server排程最終由Storage server完成檔案上傳和下載下傳。
Tracker server作用是負載均衡和排程,通過Tracker server在檔案上傳時可以根據一些政策找到Storage server提供檔案上傳服務。可以将tracker稱為追蹤伺服器或排程伺服器。
Storage server作用是檔案存儲,用戶端上傳的檔案最終存儲在Storage伺服器上,Storage server沒有實作自己的檔案系統而是利用作業系統 的檔案系統來管理檔案。可以将storage稱為存儲伺服器。
服務端兩個角色:
Tracker:管理叢集,tracker也可以實作叢集。每個tracker節點地位平等。
收集Storage叢集的狀态。
Storage:實際儲存檔案
Storage分為多個組,每個組之間儲存的檔案是不同的。每個組内部可以有多個成員,組成員内部儲存的内容是一樣的,組成員的地位是一緻的,沒有主從的概念。
1.3. 檔案上傳的流程
用戶端上傳檔案後存儲伺服器将檔案ID傳回給用戶端,此檔案ID用于以後通路該檔案的索引資訊。檔案索引資訊包括:組名,虛拟磁盤路徑,資料兩級目錄,檔案名。
n 組名:檔案上傳後所在的storage組名稱,在檔案上傳成功後有storage伺服器傳回,需要用戶端自行儲存。
n 虛拟磁盤路徑:storage配置的虛拟路徑,與磁盤選項store_path*對應。如果配置了store_path0則是M00,如果配置了store_path1則是M01,以此類推。
n 資料兩級目錄:storage伺服器在每個虛拟磁盤路徑下建立的兩級目錄,用于存儲資料檔案。
n 檔案名:與檔案上傳時不同。是由存儲伺服器根據特定資訊生成,檔案名包含:源存儲伺服器IP位址、檔案建立時間戳、檔案大小、随機數和檔案拓展名等資訊。
1.4. 檔案下載下傳
1.5. 最簡單的FastDFS架構
1. 圖檔伺服器使用
1.1. Java用戶端:
Maven環境:
1.2. 上傳圖檔
1.2.1. 上傳步驟
1、加載配置檔案,配置檔案中的内容就是tracker服務的位址。
配置檔案内容:tracker_server=192.168.25.133:22122
2、建立一個TrackerClient對象。直接new一個。
3、使用TrackerClient對象建立連接配接,獲得一個TrackerServer對象。
4、建立一個StorageServer的引用,值為null
5、建立一個StorageClient對象,需要兩個參數TrackerServer對象、StorageServer的引用
6、使用StorageClient對象上傳圖檔。
7、傳回數組。包含組名和圖檔的路徑。
1.2.2. 代碼
public class FastDFSTest { @Test public void testFileUpload() throws Exception { // 1、加載配置檔案,配置檔案中的内容就是tracker服務的位址。 ClientGlobal.init("D:/workspaces-itcast/term197/taotao-manager-web/src/main/resources/resource/client.conf"); // 2、建立一個TrackerClient對象。直接new一個。 TrackerClient trackerClient = new TrackerClient(); // 3、使用TrackerClient對象建立連接配接,獲得一個TrackerServer對象。 TrackerServer trackerServer = trackerClient.getConnection(); // 4、建立一個StorageServer的引用,值為null StorageServer storageServer = null; // 5、建立一個StorageClient對象,需要兩個參數TrackerServer對象、StorageServer的引用 StorageClient storageClient = new StorageClient(trackerServer, storageServer); // 6、使用StorageClient對象上傳圖檔。 //擴充名不帶“.” String[] strings = storageClient.upload_file("D:/Documents/Pictures/images/200811281555127886.jpg", "jpg", null); // 7、傳回數組。包含組名和圖檔的路徑。 for (String string : strings) { System.out.println(string); } } } |
1.3. 使用工具類上傳
@Test public void testFastDfsClient() throws Exception { FastDFSClient fastDFSClient = new FastDFSClient("D:/workspaces-itcast/term197/taotao-manager-web/src/main/resources/resource/client.conf"); String file = fastDFSClient.uploadFile("D:/Documents/Pictures/images/2f2eb938943d.jpg"); System.out.println(file); } |
2. 圖檔上傳功能
2.1. 功能分析
使用的是KindEditor的多圖檔上傳插件。
KindEditor 4.x 文檔
http://kindeditor.net/doc.php
請求的url:/pic/upload
參數:MultiPartFile uploadFile
傳回值:
可以建立一個pojo對應傳回值。可以使用map
業務邏輯:
1、接收頁面傳遞的圖檔資訊uploadFile
2、把圖檔上傳到圖檔伺服器。使用封裝的工具類實作。需要取檔案的内容和擴充名。
3、圖檔伺服器傳回圖檔的url
4、将圖檔的url補充完整,傳回一個完整的url。
5、把傳回結果封裝到一個Map對象中傳回。
1、需要把commons-io、fileupload 的jar包添加到工程中。
2、配置多媒體解析器。
<!-- 定義檔案上傳解析器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 設定預設編碼 --> <property name="defaultEncoding" value="UTF-8"></property> <!-- 設定檔案上傳的最大值5MB,5*1024*1024 --> <property name="maxUploadSize" value="5242880"></property> </bean> |