
本案例介紹基於Ribbon實現文件上傳。整個應用分為3個微服務項目,分別是Eureka服務器項目mweathereurekaserver、文件上傳服務提供者項目uploadfile、文件上傳服務消費者項目fileuser。
本案例中Eureka服務器項目mweathereurekaserver的實現方法和 上一篇 中的實現方法相同,請參考 上一篇 第一節說明和參考書附帶的源代碼。
1
實現文件上傳服務提供者項目uploadfile
1
●
新建項目並添加依賴
新建項目uploadfile,確保在文件pom.xml的<dependencies>和</dependencies>之間添加了Eureka Client、Thymeleaf、Lombok、Web依賴。
2
●
創建類
依次在包com.bookcode下創建exception、service、controller等子包。並在包com.bookcode.exception中創建類StorageException、StorageFileNotFoundException,在包com.bookcode.service中創建類StorageService,在包com.bookcode.controller中創建類FileUploadController、UploadPictureController,並修改這些類的代碼。
3
●
新建文件和修改配置文件
在目錄src/main/resources/templates下創建文件index.html、welcome.html、uploadForm.html,並修改這些文件的代碼。
修改在目錄src/main/resources下的配置文件application.properties。
上述文件的具體代碼請參考本書附帶的源代碼。
2
實現文件上傳服務消費者項目fileuser
1
●
新建項目並添加依賴
新建項目fileuser,確保在文件pom.xml的<dependencies>和</dependencies>之間添加了Eureka Client、Web依賴。
2
●
創建類、修改配置文件和配置文件
在包com.bookcode中創建類CallFileUpload、FileUploadController,並修改這些類的代碼。
修改入口類,增加實現負載均衡的代碼。
修改在目錄src/main/resources下的配置文件application.properties。
上述文件的具體代碼請參考本書附帶的源代碼。
3
程序運行結果
在D盤創建一個文件夾upload-dir。
依次運行項目mweathereurekaserver(端口為8761)、uploadfile(服務名稱為file-upload,端口為8093)、fileuser(端口為8099)。
在瀏覽器中輸入localhost:8093,結果如圖C-1所示。

■圖C-1在瀏覽器中輸入localhost:8093的結果
單擊「選擇文件」按鈕,如圖C-1所示,選擇要上傳的文件,再單擊Upload按鈕,結果如圖C-2所示。

■圖C-2正確上傳文件後的結果
在瀏覽器中輸入localhost:8093/upload,結果如圖C-3所示。
■圖C-3在瀏覽器中輸入localhost:8093/upload的結果
單擊圖C-3中「選擇文件」按鈕,選擇要上傳的文件,再單擊圖C-3中「上傳」按鈕,結果如圖C-2所示。
在瀏覽器中輸入localhost:8099/uponefile,結果如圖C-4所示。
■圖C-4在瀏覽器中輸入localhost:8099/uponefile的結果
單擊圖C-4中「選擇文件」按鈕,選擇要上傳的文件,再單擊Upload按鈕,結果如圖C-5所示。
■圖C-5在圖C-4或C-6的基礎上正確上傳文件後的結果
在瀏覽器中輸入localhost:8099/upfiles,結果如圖C-6所示。單擊圖C-6中「選擇文件」按鈕,選擇要上傳的文件,再單擊「上傳」按鈕,結果如圖C-5所示。
■圖C-6在瀏覽器中輸入localhost:8099/upfiles的結果
保持原有項目uploadfile(端口為8093)中其他所有文件不變,只修改配置文件application.properties中設置端口的代碼,再啟動兩個與項目uploadfile微服務內容相同的新服務器(端口分別為8095、8096)。在瀏覽器中輸入localhost:8099/greet,並不斷進行刷新頁面操作,會依次循環顯示如圖C-7(對應的服務器端口為8093)、圖C-8(對應的服務器端口為8095)、圖C-9(對應的服務器端口為8096)所示的結果。
■圖C-7由端口為8093的服務器提供服務的結果
■圖C-8由端口為8095的服務器提供服務的結果
■圖C-9由端口為8096的服務器提供服務的結果
與本案例類似的代碼可以參考網址https://github.com/JavaCodeMood/spring-cloud-demo/tree/master/file-upload,讀者可以對比此網址的代碼和本書附帶的源代碼,加深對Ribbon應用開發的認識。

掃碼觀看視頻講解 限免3天
4
參考書籍

《Spring Cloud 微服務開發實戰-微課視頻版》
ISBN:9787302542346
作者:吳勝
定價:49.9元



