天天看點

圖檔上傳伺服器fastDFS1. 圖檔伺服器的安裝1. 圖檔伺服器的安裝1. 圖檔伺服器使用2. 圖檔上傳功能

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>

繼續閱讀