利用SpringBoot云服務器的FastDFS實現(xiàn)文件上傳
.2 環(huán)境前置要求
本地虛擬機/云服務器:CentOS7.x 版別
將FastDFS 和 Nginx 相關的軟件壓縮包下載完結并上傳到云服務器中,下載鏈接如下:
nginx-1.18.0.tar.gz
libfastcommon-1.0.38.tar.gz
fastdfs-5.11.tar.gz
fastdfs-nginx-module-1.20.tar.gz
下載完結后如圖:
將下載的壓縮文件通過Xftp 6 上傳到云服務器指定途徑下,我指定的途徑是:/usr/local/src/software
1.3 裝置單節(jié)點的FastDFS
由于我這兒僅僅用FastDFS 去做文件服務器,個人開發(fā)不需求用到集群的FastDFS,而且個人也沒有多臺服務器的環(huán)境!假如有需求,能夠找一篇關于FastDFS集群環(huán)境搭建的文章閱讀!
1.3.1 裝置gcc 和nginx 依靠庫
由于FastDFS 本身便是淘寶的大牛用C語言寫的,所以其依靠于對C進行編譯的環(huán)境 gcc,裝置指令如下:
yum -y install gcc
除了gcc之外,還需求裝置nginx 相關的依靠庫,由于后續(xù)要裝置 nginx :
yum install pcre pcre-devel yum install zlib zlib-devel yum install openssl openssl--devel yum install libevent
留意:假如你本機裝置的nginx壓縮包不是tar.gz而是zip格局的,這時候需求自己下載一下解壓zip格局文件的指令unzip,下載指令如下:
yum install -y unzip zip
1.3.2 裝置libfastcommon 咱們進入上傳軟件壓縮包的途徑:cd /usr/local/src/software
解壓: tar -zxvf libfastcommon-1.0.38 進入解壓完結后的目錄: cd libfastcommon-1.0.38/ 履行編譯而且裝置: ./make.sh ./make.sh install
1.3.3 裝置fastdfs
解壓: tar -zxvf fastdfs-5.11.tar.gz 進入解壓完結后的目錄: cd fastdfs-5.11/ 履行編譯而且裝置: ./make.sh ./make.sh install
假如裝置成功,會看到/etc/init.d/下看到提供的腳本文件:
- fdfs_trackerd是tracker發(fā)動腳本
- fdfs_storaged是storage發(fā)動腳本
能夠在 /etc/fdfs/ 目錄下看到默許的裝備文件模板:
ll /etc/fdfs/ 成果如下: -rw-r--r-- 1 root root 1461 Dec 9 20:26 client.conf.sample -rw-r--r-- 1 root root 7927 Dec 9 20:26 storage.conf.sample -rw-r--r-- 1 root root 7389 Dec 9 20:26 tracker.conf.sample
tarcker.conf.sample 是tracker的裝備文件模板
storage.conf.sample 是storage的裝備文件模板
client.conf.sample 是客戶端的裝備文件模板
1.3.4 裝備并發(fā)動tracker服務
FastDFS 的 tracker 和 storage 在剛剛的裝置過程中,都已經(jīng)被裝置了,因此咱們裝置這兩種人物的辦法是相同的。不同的是,兩種需求不同的裝備文件。
咱們要發(fā)動tracker,就修正剛剛看到的tarcker.conf,而且發(fā)動fdfs_trackerd腳本即可:
1)首先將模板文件仿制:
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
2)修正仿制后的裝備文件:
vim /etc/fdfs/tracker.conf # 修正的內容如下: base_path=/fastdfs_files/tracker # 自己指定的存儲日志和數(shù)據(jù)的根目錄
由于自己指定的目錄默許是不存在的,所以修正過裝備文件后,咱們新建一下該目錄:
mkdir -p /fastdfs_files/tracker
留意:假如運用的是本地虛擬機請封閉防火墻,云服務器記得開放安全組對應的端口!下面是我的云服務器開放的端口,FastDFS 默許需求23000 和 22122 兩個端口:
4)發(fā)動和中止:
發(fā)動tracker服務器: /etc/init.d/fdfs_trackerd start
中止tracker服務器: /etc/init.d/fdfs_trackerd stop
不過裝置過程中,fdfs 已經(jīng)被設置為系統(tǒng)服務,咱們能夠選用熟悉的服務發(fā)動辦法:
service fdfs_trackerd start # 發(fā)動fdfs_trackerd服務,中止用stop
查看FastDFS Tracker Server是否發(fā)動成功:
ps -ef | grep fdfs_trackerd
假如是本地虛擬機,不想每次開機都重新發(fā)動該服務,能夠將其設置為敞開自發(fā)動:
chkconfig fdfs_trackerd on
1.3.5 裝備并發(fā)動storage服務
過程類似于1.3.4:
1)首先將模板文件仿制:
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
2)修正仿制后的裝備文件:
vim /etc/fdfs/storage.conf # 修正的內容如下: base_path=/fastdfs_files/storage # 數(shù)據(jù)和日志文件存儲根目錄 store_path0=/fastdfs_files/storage # 第一個存儲目錄 tracker_server=本機ip:22122 # tracker服務器IP和端口
由于自己指定的目錄默許是不存在的,所以修正過裝備文件后,咱們新建一下該目錄:
mkdir -p /fastdfs_files/storage
3)發(fā)動和中止:
- 發(fā)動storage服務器:/etc/init.d/fdfs_storaged start
- 中止storage服務器:/etc/init.d/fdfs_storaged stop
引薦運用如下辦法發(fā)動:
service fdfs_storaged start # 發(fā)動fdfs_storaged服務,中止用stop
能夠運用ps -ef | grep fdfs查看進程:
假如是本地虛擬機,不想每次開機都重新發(fā)動該服務,能夠將其設置為敞開自發(fā)動:
chkconfig fdfs_trackerd on
再次提示:本地虛擬機封閉防火墻,云服務器敞開安全組端口!
2. 運用nginx拜訪FastDFS
2.1 裝置fastdfs-nginx-module
2.1.1 解壓
tar -zxvf fastdfs-nginx-module-1.20.tar.gz
2.1.2 修正config文件
1)進入解壓后的文件夾下的src目錄
cd fastdfs-nginx-module-1.20/src/
2)編輯config
vim config
運用以下底行指令:
:%s+/usr/local/+/usr/+g
將所有的/usr/local替換為 /usr,這個才是正確的目錄:
2.1.3 裝備nginx與FastDFS關聯(lián)裝備文件
仿制 fastdfs-nginx-module-1.20 源碼中的裝備文件到/etc/fdfs 目錄, 并修正:
cp /usr/local/src/software/fastdfs-nginx-module-1.20/src/mod_fastdfs.conf /etc/fdfs/ vim /etc/fdfs/mod_fastdfs.conf
修正以下裝備:
connect_timeout=10 # 客戶端拜訪文件連接超時時長(單位:秒) tracker_server=本機ip:22122 # tracker服務IP和端口 url_have_group_name=true # 拜訪鏈接前綴加上組名 store_path0=/fastdfs_files/storage # 文件存儲途徑
仿制 FastDFS 的部分裝備文件到/etc/fdfs 目錄:
cd /usr/local/src/software/fastdfs-5.11/conf/ cp http.conf mime.types /etc/fdfs/
2.2 裝置Nginx的插件
由于文章 1.3.1 末節(jié)已經(jīng)裝置了 nginx 依靠庫,所以這兒不需求再裝置:
# 假如前面沒裝置,這兒就需求裝置虛啊 nginx依靠庫: yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
2.2.1 解壓裝置包
tar -zxvf nginx-1.18.0.tar.gz
2.2.2 裝備nginx裝置包并指定fastdfs-nginx-model
# 進入解壓后的nginx-1.18.0 目錄: cd nginx-1.18.0/ # 履行以下指令: ./configure --prefix=/opt/nginx --sbin-path=/usr/bin/nginx --add-module=/usr/local/src/software/fastdfs-nginx-module-1.20/src/
留意:在履行./configure裝備nginx 參數(shù)的時候,需求將 fastdfs-nginx-moudle 源碼作為模塊編譯進去。
2.2.3 編譯并裝置
make && make install
2.2.4 發(fā)動nginx
裝備nginx整合fastdfs-module模塊,咱們需求修正nginx裝備文件,在/opt/nginx/config/nginx.conf 文件中:
vim /opt/nginx/conf/nginx.conf
將文件中,原來的server 80{ ...}部分代碼替換為如下代碼:
server { listen 80; server_name 你的域名; # 監(jiān)聽域名中帶有group的,交給FastDFS模塊處理 location ~/group([0-9])/ { ngx_fastdfs_module; } location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
發(fā)動指令:
nginx # 發(fā)動nginx nginx -s stop # 中止nginx nginx -s reload # 重新載入裝備文件
可通過ps -ef | grep nginx查看nginx是否已發(fā)動成功:
3. 運用SpringBoot 整合FastDFS
3.1 相關依靠
com.github.tobato fastdfs-client
3.2 相關裝備參數(shù)
# fastDFS 相關裝備 fdfs: so-timeout: 1501 # 讀取超時時刻 connect-timeout: 601 # 連接超時時刻 thumb-image: # 縮略圖裝備 width: 60 height: 60 tracker-list: # tracker地址:你的虛擬機服務器地址+端口(默許是22122) - 你的服務器ip:22122
3.3 相關裝備類
/** * @Auther: csp1999 * @Date: 2020/12/10/11:29 * @Description: fastDFS 客戶端裝備類 */ @Configuration @Import(FdfsClientConfig.class) // 解決jmx重復注冊bean的問題 @EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING) public class FastDfsClientConfig { }
3.4 測驗類中進行測驗
/** * @Auther: csp1999 * @Date: 2020/12/10/11:33 * @Description: 測驗FastDFS 文件上傳 */ @SpringBootTest @RunWith(SpringRunner.class) public class FastDFSTest { // fastDFS 存儲客戶端 @Autowired private FastFileStorageClient storageClient; // 用于獲取 fastDFS 圖片縮略圖 @Autowired private ThumbImageConfig thumbImageConfig; @Test public void testUpload() throws FileNotFoundException { // 獲取本機要上傳的文件 File file = new File("M:\\code\\IDEA\\leyou\\image\\lf.jpg"); /** * 上傳并保存圖片 * * 參數(shù): * 1-上傳的文件流 * 2-文件的巨細 * 3-文件的后綴 * 4-能夠不論他 */ StorePath storePath = this.storageClient.uploadFile( new FileInputStream(file), file.length(), "jpg", null); // 帶分組的途徑 System.out.println(storePath.getFullPath()); // 不帶分組的途徑 System.out.println(storePath.getPath()); } @Test public void testUploadAndCreateThumb() throws FileNotFoundException { // 獲取本機要上傳的文件 File file = new File("M:\\code\\IDEA\\leyou\\image\\bz4.jpg"); /** * 上傳并保存圖片而且生成縮略圖 * * 參數(shù): * 1-上傳的文件流 * 2-文件的巨細 * 3-文件的后綴 * 4-能夠不論他 */ StorePath storePath = this.storageClient.uploadImageAndCrtThumbImage( new FileInputStream(file), file.length(), "png", null); // 帶分組的途徑 System.out.println(storePath.getFullPath()); // 不帶分組的途徑 System.out.println(storePath.getPath()); // 獲取縮略圖途徑 String path = thumbImageConfig.getThumbImagePath(storePath.getPath()); System.out.println(path); } }
先測驗testUpload()辦法,輸出成果:
然后咱們就能夠通過服務器ip地址/group1/M00/00/00/wKg4ZVsWl5eAdLNZAABAhya2V0c424.jpg,去拜訪圖片:
同理咱們測驗testUploadAndCreateThumb()帶縮略圖的辦法,輸出成果如下:
group1/M00/00/00/rBHaFV_Rmq6AC7m3AAQvu4hOzN4945.png # 帶分組的途徑 M00/00/00/rBHaFV_Rmq6AC7m3AAQvu4hOzN4945.png # 不帶分組的途徑 M00/00/00/rBHaFV_Rmq6AC7m3AAQvu4hOzN4945_60x60.png # 縮略圖途徑
咱們先看下不是縮略圖的作用:ip地址/group1/M00/00/00/rBHaFV_Rmq6AC7m3AAQvu4hOzN4945.png
再看下縮略圖的作用:ip地址/group1/M00/00/00/rBHaFV_Rmq6AC7m3AAQvu4hOzN4945_60x60.png
圖片巨細是咱們在裝備文件中裝備的寬高60px! 咱們能夠到服務器/fastdfs_files/storage/data/途徑下查看上傳的圖片:
SpringBoot整合FastDFS完結!