FastDFS文件上传和下载(java代码实现)
FastDFS的體系結構
FastDFS 主要包括Tracker Server 和 Storage Server。Tracker server 是 FastDFS 文件系統的協調者,主要作用是負載均衡和調度選擇 Storage server 進行文件存儲。
FastDFS文件上傳
Storage Server 定期向Tracker Server 發送狀態信息,保持心跳連接。
客戶端發起文件上傳請求。
Tracker Server 查詢所有與它保持連接的 Storage Server ,調度找到一個合適的 Storage Server。
Tracker Server 向客戶端返回該 Storage Server 的相關信息,包括 Storage Server 的 ip 和端口號。
客戶端通過 ip 和端口號與 Storage Server 建立連接,發送文件數據
Storage Server 生成唯一的路徑名 file_id ,file_id 由分組名(group)和文件路徑名(url)拼接而成。
Storage Server 將接收到的內容寫入當前服務器磁盤中,并向客戶端返回 file_id 信息,客戶端按需要進行保存相關信息。
java代碼實現
/*** 文件上傳* @param file* @return*/public static String[] upload(MyFile file) {try {// 創建TrackerClient客戶端對象TrackerClient trackerClient = new TrackerClient();// 通過TrackerClient對象獲取TrackerServer信息TrackerServer trackerServer = trackerClient.getConnection();// 獲取StorageClient對象StorageClient storageClient = new StorageClient(trackerServer,null);NameValuePair[] meta_list = new NameValuePair[]{new NameValuePair(file.getAuthor()), new NameValuePair(file.getName())};String[] strings = storageClient.upload_file(file.getContent(), file.getExt(), meta_list);return strings;// strings[0]==group1 strings[1]=M00/00/00/wKjThF1aW9CAOUJGAAClQrJOYvs424.jpg} catch (Exception e) {e.printStackTrace();}return null;}FastDFS文件下載
Storage Server 定期向Tracker Server 發送狀態信息,保持心跳連接。
客戶端發起文件下載請求。
Tracker Server 查詢所有與它保持連接的 Storage Server ,調度找到一個合適的 Storage Server。
Tracker Server 向客戶端返回該 Storage Server 的相關信息,包括 Storage Server 的 ip 和端口號。
客戶端通過 ip 和端口號與 Storage Server 建立連接,客戶端向 Storage Server 請求文件數據(攜帶分組號和文件路徑參數)
Storage Server 同一組之間同步線程,共享文件數據,因此即便是不同的 Storage Server 仍能找到對應的文件地址。
Storage Server 發送給客戶端對應的文件數據,客戶端通過 io 流下載文件數據到本地
java代碼實現
public static InputStream downFile(String groupName,String remoteFileName){try {//創建TrackerClient對象TrackerClient trackerClient = new TrackerClient();//通過TrackerClient對象創建TrackerServerTrackerServer trackerServer = trackerClient.getConnection();//通過TrackerServer創建StorageClientStorageClient storageClient = new StorageClient(trackerServer,null);//通過StorageClient下載文件byte[] fileByte = storageClient.download_file(groupName, remoteFileName);//將字節數組轉換成字節輸入流return new ByteArrayInputStream(fileByte);} catch (Exception e) {e.printStackTrace();}return null;}總結
以上是生活随笔為你收集整理的FastDFS文件上传和下载(java代码实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2873-36-1,Gancidin W
- 下一篇: 队列元素排序