1. 程式人生 > >SpringBoot2高階案例(11):整合 FastDFS 中介軟體,實現檔案分散式管理

SpringBoot2高階案例(11):整合 FastDFS 中介軟體,實現檔案分散式管理

一、FastDFS簡介

1、FastDFS作用

FastDFS是一個開源的輕量級分散式檔案系統,它對檔案進行管理,功能包括:檔案儲存、檔案同步、檔案上傳、檔案下載等,解決了大容量儲存和負載均衡的問題。

安裝連線:

安裝流程詳解

2、核心角色

FastDFS是由跟蹤伺服器(trackerserver)、儲存伺服器(storageserver)和客戶端(client)三個部分組成。

1)跟蹤伺服器

FastDFS的協調者,負責管理所有的storage server和group,每個storage在啟動後會連線Tracker,告知自己所屬的group等資訊,並保持週期性的心跳,tracker根據storage的心跳資訊,建立group到[storage server list]的對映表。

2)儲存伺服器

以組(group)為單位,一個group內包含多臺storage機器,資料互為備份,儲存空間以group內容量最小的storage為準,所以建議group內的多個storage儘量配置相同,以免造成儲存空間的浪費。

3)客戶端

業務請求的發起方,通過專有介面,使用TCP/IP協議與跟蹤器伺服器或儲存節點進行資料互動。

3、運轉流程

1、儲存服務定時向跟蹤服務上傳狀態資訊;
2、客戶端發起請求;
3、跟蹤器同步儲存器狀態,返回儲存服務埠和IP;
4、客戶端執行檔案操作(上傳,下載)等。

二、與SpringBoot2整合

1、核心步驟

1)、配置FastDFS執行環境
2)、檔案上傳配置
3)、整合Swagger2測試介面

2、核心依賴

<!-- FastDFS依賴 -->
<dependency>
    <groupId>com.github.tobato</groupId>
    <artifactId>fastdfs-client</artifactId>
    <version>1.26.5</version>
</dependency>
<!-- Swagger2 核心依賴 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.6.1</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.6.1</version>
</dependency>

3、配置FastDFS

  1. 核心配置檔案
fdfs:
  # 連結超時
  connect-timeout: 60
  # 讀取時間
  so-timeout: 60
  # 生成縮圖引數
  thumb-image:
    width: 150
    height: 150
  tracker-list: 192.168.72.130:22122
  1. 核心配置類
@Configuration
@Import(FdfsClientConfig.class)
// Jmx重複註冊bean的問題
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public class DfsConfig {
}

2)檔案工具類

@Component
public class FileDfsUtil {
    private static final Logger LOGGER = LoggerFactory.getLogger(FileDfsUtil.class);
    @Resource
    private FastFileStorageClient storageClient ;
    /**
     * 上傳檔案
     */
    public String upload(MultipartFile multipartFile) throws Exception{
        String originalFilename = multipartFile.getOriginalFilename().
                                  substring(multipartFile.getOriginalFilename().
                                  lastIndexOf(".") + 1);
        StorePath storePath = this.storageClient.uploadImageAndCrtThumbImage(
                              multipartFile.getInputStream(),
                              multipartFile.getSize(),originalFilename , null);
        return storePath.getFullPath() ;
    }
    /**
     * 刪除檔案
     */
    public void deleteFile(String fileUrl) {
        if (StringUtils.isEmpty(fileUrl)) {
            LOGGER.info("fileUrl == >>檔案路徑為空...");
            return;
        }
        try {
            StorePath storePath = StorePath.parseFromUrl(fileUrl);
            storageClient.deleteFile(storePath.getGroup(), storePath.getPath());
        } catch (Exception e) {
            LOGGER.info(e.getMessage());
        }
    }
}

4、檔案上傳配置

spring:
  application:
    name: ware-fast-dfs
  servlet:
    multipart:
      enabled: true
      max-file-size: 10MB
      max-request-size: 20MB

5、配置Swagger2

主要用來生成檔案上傳的測試介面。

1)配置程式碼類

@Configuration
public class SwaggerConfig {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.fast.dfs"))
                .paths(PathSelectors.any())
                .build();
    }
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("SpringBoot利用Swagger構建API文件")
                .description("使用RestFul風格, 建立人:知了一笑")
                .termsOfServiceUrl("https://github.com/cicadasmile")
                .version("version 1.0")
                .build();
    }
}

2)啟動類註解

@EnableSwagger2

三、演示案例

1、介面程式碼

@RestController
public class FileController {
    @Resource
    private FileDfsUtil fileDfsUtil ;
    /**
     * 檔案上傳
     */
    @ApiOperation(value="上傳檔案", notes="測試FastDFS檔案上傳")
    @RequestMapping(value = "/uploadFile",headers="content-type=multipart/form-data", method = RequestMethod.POST)
    public ResponseEntity<String> uploadFile (@RequestParam("file") MultipartFile file){
        String result ;
        try{
            String path = fileDfsUtil.upload(file) ;
            if (!StringUtils.isEmpty(path)){
                result = path ;
            } else {
                result = "上傳失敗" ;
            }
        } catch (Exception e){
            e.printStackTrace() ;
            result = "服務異常" ;
        }
        return ResponseEntity.ok(result);
    }
    /**
     * 檔案刪除
     */
    @RequestMapping(value = "/deleteByPath", method = RequestMethod.GET)
    public ResponseEntity<String> deleteByPath (){
        String filePathName = "group1/M00/00/00/wKhIgl0n4AKABxQEABhlMYw_3Lo825.png" ;
        fileDfsUtil.deleteFile(filePathName);
        return ResponseEntity.ok("SUCCESS") ;
    }
}

2、執行流程

1、訪問http://localhost:7010/swagger-ui.html測試介面
2、呼叫檔案上傳介面,拿到檔案在FastDFS服務的路徑
3、瀏覽器訪問:http://192.168.72.130/group1/M00/00/00/wKhIgl0n4AKABxQEABhlMYw_3Lo825.png
4、呼叫刪除介面,刪除伺服器上圖片
5、清空瀏覽器快取,再次訪問圖片Url,回返回404

四、原始碼地址

GitHub地址:知了一笑
https://github.com/cicadasmile/middle-ware-parent
碼雲地址:知了一笑
https://gitee.com/cicadasmile/middle-ware-parent

相關推薦

SpringBoot2高階案例(11)整合 FastDFS 中介軟體實現檔案分散式管理

一、FastDFS簡介 1、FastDFS作用 FastDFS是一個開源的輕量級分散式檔案系統,它對檔案進行管理,功能包括:檔案儲

SpringBoot2 整合MinIO中介軟體實現檔案便捷管理

本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile/middle-ware-parent) || [GitEE·點這裡](https://gitee.com/cicadasmile/middle-ware-parent) # 一、MinIO簡介 ## 1、

SpringBoot2.0高階案例(02) 整合 RocketMQ ,實現請求非同步處理

本文原始碼 碼雲地址:知了一笑 https://gitee.com/cicadasmile/middle-ware-parent

SpringBoot2.0高階案例(03)整合 JavaMail ,實現非同步傳送郵件

本文原始碼 碼雲地址:知了一笑 https://gitee.com/cicadasmile/middle-ware-parent

SpringBoot2.0高階案例(05)整合 Swagger2 ,構建介面管理介面

一、Swagger2簡介 1、Swagger2優點 整合到Spring Boot中,構建強大RESTful API文件。省去介面文

SpringBoot2.0高階案例(06)整合 QuartJob ,實現定時器實時管理

一、QuartJob簡介 1、一句話描述 Quartz是一個完全由java編寫的開源作業排程框架,形式簡易,功能強大。 2、核心A

SpringBoot2.0高階案例(09)整合 ElasticSearch框架,實現高效能搜尋引擎

本文原始碼 碼雲地址:知了一笑 https://gitee.com/cicadasmile/middle-ware-parent

SpringBoot2.0高階案例(12)整合 SpringSecurity 框架實現使用者許可權安全管理

一、Security簡介 1、基礎概念 Spring Security是一個能夠為基於Spring的企業應用系統提供宣告式的安全訪

SpringBoot2.0高階案例(10)整合 JWT 框架解決Token跨域驗證問題

GitHub原始碼地址:知了一笑 https://github.com/cicadasmile/middle-ware-paren

SpringBoot2.0高階案例(08)整合 Dubbo框架 ,實現RPC服務遠端呼叫

一、Dubbo框架簡介 1、框架依賴 圖例說明: 1)圖中小方塊 Protocol, Cluster, Proxy, Servi

螞蟻金服SOFA開源負責人魯直不只是中介軟體未來會開源更多

近日,技術媒體Linux中國的創始人王興宇對螞蟻金服SOFA開源負責人魯直,就SOFA 5、ServiceMesh、Serverl

SpringBoot 2.0 整合sharding-jdbc中介軟體實現資料分庫分表

一、水平分割 1、水平分庫 1)、概念: 以欄位為依據,按照一定策略,將一個庫中的資料拆分到多個庫中。 2)、結果 每個庫的結構都

Spring Boot 入門(十)整合Redis哨兵模式實現Mybatis二級快取

本片文章續《Spring Boot 入門(九):整合Quartz定時任務》。本文主要基於redis實現了mybatis二級快取。較redis快取,mybaits自帶快取存在缺點(自行谷歌)。本文是基於docker安裝redis主從模式。 1.redis安裝 (1)首先安裝redis叢集模式,建立redis目錄

Scrapy爬蟲 -- 編寫下載中介軟體實現隨機User-Agent

Scrapy爬蟲 -- 編寫下載中介軟體,實現隨機User-Agent 實現步驟: 1. 在middlewares.p中,新建一個下載中介軟體; 2. 建立process_request方法(引擎傳送request物件到下載器時的回撥函式),實現隨機User-Agent的功能; 3.

Django - 使用自定義中介軟體實現登陸驗證

目錄 一、中介軟體 mymiddelware.py 檔案 二、檢視檔案 三、前端提交資料   一、中介軟體 mymiddelware.py 檔案 from django.utils.deprecation import MiddlewareMixin

SpringBoot2 高階案例(14) : 整合 Drools規則引擎實現高效的業務規則

一、Drools引擎簡介 1、基礎簡介 Drools是一個基於java的規則引擎,開源的,可以將複雜多變的規則從硬編碼中解放出來,以規則指令碼的形式存放在檔案中,使得規則的變更不需要修正程式碼重啟機器就可以立即在線上環境生效。具有易於訪問企業策略、易於調整以及易於管理的特點,作為開源業務規則引擎,符合業內

案例11高層綜合樓防火案例分析(一)

技術分享 image 9.png bubuko mage info 變壓器 技術 綜合 案例11:高層綜合樓防火案例分析(一) 建築分類和耐火等級: 總平面布局 防火分區: 消防水泵設置規定 鍋爐房,變壓器 案例11:高

Ubuntu16.04系統下 解決“無法獲得鎖 /var/lib/dpkg/lock -open (11資源暫時不可用)、無法鎖定管理目錄(/var/lib/dpkg/)是否有其他進程正占用它?”的方法

方法 div 終端 例如 解決辦法 all -o 強制 安裝 在Ubuntu16.04下安裝軟件,例如:sudo apt-get install lrzsz時提示:   無法獲得鎖 /var/lib/dpkg/lock - open (11: 資源暫時不可用)  無法鎖定

用友開發啟動伺服器中介軟體時提示”Init datasource error [NC65] can not get connection,please check the DBSet”

問題:啟動伺服器中介軟體時提示”Init datasource error [NC65] can not get connection,please check the DBSet”,測試資料庫連線時,是可以連上的。 可能原因:刪除專案導致 解決方法:1)新建專案,重啟中介軟體伺服器,未解決

一種古老的技術axis1.4操作WebService實現與Spring整合

這是pom檔案中需要的axis需要的依賴 <dependency> <groupId>org.springframework</groupId> <artifactId>spr