分佈式文件系統nginx
實現圖片上傳功能,須要圖片服務器json
若是要實現圖片上傳功能,須要一臺圖片服務器(能夠不要,可是由於圖片上傳只能到指定的服務器上,若是不搭建另一臺服務器用於接收圖片,則只能上傳到正在運行的應用服務器,這樣的話,應用服務器的壓力將會無限加大)數組
一、存儲空間可擴展服務器
二、提供統一的訪問方式架構
三、訪問效率高負載均衡
一、使用fastDFS分佈式文件系統分佈式
二、使用nginx反向代理服務器性能
FastDFS(Fast Distributed file system),使用了C語言編寫的一款開源的分佈式文件系統。FastDFS爲互聯網量身定製,充分考慮了冗餘備份、負載均衡、橫向擴展等機制,並注重高可用、高性能等指標,使用FastDFS能夠很容易搭建一套高性能的文件服務器集羣,提供文件上傳、下載等服務this
FastDFS架構包括Tracker server和Storage server。由客戶端請求Tracker server文件的上傳或下載,Tracker server調度Storage server完成文件上傳下載。spa
負載均衡和調度,經過Tracker server調度,經過Tracker server在文件上傳時能夠根據一些策略找到storage server提供文件上傳服務,能夠將tracker稱爲追蹤服務器或調度服務器。
文件存儲,客戶端上傳的文件最終存儲在storage server,storage server沒有實現本身的文件系統而是利用操做系統的文件系統來管理文件,能夠將storage稱爲存儲服務器
Tracker server管理集羣,收集信息,處理信息,爲了保證高可用,能夠搭建集羣
Storage server保存文件,分爲多組,組合組之間的數據不同,組內成員數據一致,保證數據高可用,能夠增長組,達到擴容效果
其中,file_id指文件索引信息,內包含:組名、虛擬磁盤路徑、數據兩級目錄、文件名,以下圖:
引入依賴
<!--fastdfs-client--> <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client</artifactId> <version>1.25-RELEASE</version> </dependency>
配置fafstdfc_client.conf
tracker_server=192.168.96.253:22122
Java步驟
//加載配置文件 Stringconf_filename=this.class().getResource("/fastdfs_client.conf").getPath(); //初始化客戶端全局對象 ClientGlobal.init(conf_filename); //建立存儲客戶端對象 StorageClientstorageClient=newStorageClient(); //上傳文件 String[]arr=storageClient.upload_file("即將上傳的文件路徑",null); /** *訪問路徑:http://192.168.12.131/group1/M00/00/00/wKgMg1o53fOAL1CRAABonuLw4M4127.jpg *[group1,M00/00/00/wKgMgFlIkk2AHfnLAABonuLw4M4075.jpg] *數組中的第一個元素:組的名稱 *數組中的第二個元素:遠程文件名稱 */
返回的數組中
第一個元素:組名
第二個名字:遠程名
下載
//加載配置文件 Stringconf_filename=this.getClass().getResource("/fastdfs_clien.conf").getPath(); //初始化客戶端全局的對象 ClientGlobal.init(conf_filename); //建立存儲客戶端對象 StorageClientstorageClient=newStorageClient(); //下載文件 byte[]data=storageClient.download_file("組名","遠程文件名"); FileOutputStreamfos=newFileOutputStream(newFile("文件下載存儲路徑")); fos.write(data); fos.flush(); fos.close();
刪除服務器上圖片
//加載配置文件 Stringconf_filename=this.getClass().getResource("/fastdfs_client.conf").getPath(); //初始化客戶端全局對象 ClientGlobal.init(conf_filename); //建立存儲客戶端對象 storageClientstorageClient=newStorageClient(); //刪除文件 intres=storageClient.delete_file("組名","遠程文件名"); /* *若是返回0,則表明成功刪除 */