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.使用步驟
第一步:把圖片服務器解壓縮。
第二步:把圖片服務器添加到Vmware中。
第三步:Vmware的網絡配置。
這裏寫圖片描述
第四步:開機
這裏寫圖片描述
移動:網絡配置不發生變化。要使用圖片服務器,需要保證網絡配置不變。
複製:重新生成一塊網卡mac地址是新地址。
Ip地址:192.168.25.133
用戶名root、itcast
密碼:itcast
2.圖片服務器使用
2.1.Java客戶端:
這裏寫圖片描述
Maven環境:
這裏寫圖片描述
2.2.上傳圖片
2.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、返回數組。包含組名和圖片的路徑。
2.2.2.代碼

public class FastDFSTest {

    @Test
    public void testFileUpload() throws Exception {
        // 1、加載配置文件,配置文件中的內容就是tracker服務的地址。
        ClientGlobal.init("D:/workspaces-itcast/e3-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);
        }
    }
}

2.3.使用工具類上傳
2.4.Controller

@Controller
public class PictureController {

    @Value("${IMAGE_SERVER_URL}")
    private String IMAGE_SERVER_URL;

    @RequestMapping("/pic/upload")
    @ResponseBody
    public Map fileUpload(MultipartFile uploadFile) {
        try {
            //1、取文件的擴展名
            String originalFilename = uploadFile.getOriginalFilename();
            String extName = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
            //2、創建一個FastDFS的客戶端
            FastDFSClient fastDFSClient = new FastDFSClient("classpath:resource/client.conf");
            //3、執行上傳處理
            String path = fastDFSClient.uploadFile(uploadFile.getBytes(), extName);
            //4、拼接返回的url和ip地址,拼裝成完整的url
            String url = IMAGE_SERVER_URL + path;
            //5、返回map
            Map result = new HashMap<>();
            result.put("error", 0);
            result.put("url", url);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            //5、返回map
            Map result = new HashMap<>();
            result.put("error", 1);
            result.put("message", "圖片上傳失敗");
            return result;
        }
    }
}

2.5.解決瀏覽器兼容性的問題
KindEditor的圖片上傳插件,對瀏覽器兼容性不好。
使用@ResponseBody註解返回java對象,
Content-Type:application/json;charset=UTF-8

返回字符串時:
Content-Type:text/plan;charset=UTF-8
返回字符串時:
Content-Type:text/plan;charset=UTF-8
這裏寫圖片描述
指定響應結果的content-type:
這裏寫圖片描述
KindEditor的多圖片上傳插件最後響應的content-type是text/plan格式的json字符串。兼容性是最好的。
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章