阿里雲伺服器搭建FTP圖片伺服器[圖文詳解]
FastDFS是用c語言編寫的一款開源的分散式檔案系統。FastDFS為網際網路量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高效能等指標,使用FastDFS很容易搭建一套高效能的檔案伺服器叢集提供檔案上傳、下載等服務。
Tracker 用來負載均衡與排程
Storage 儲存圖片
1.1 檔案上傳流程
1.2 檔案下載流程
1.3 上傳檔案的檔名
客戶端上傳檔案後儲存伺服器將檔案ID返回給客戶端,此檔案ID用於以後訪問該檔案的索引資訊。
檔案索引資訊包括:組名,虛擬磁碟路徑,資料兩級目錄,檔名。
n 組名:檔案上傳後所在的storage組名稱,在檔案上傳成功後有storage伺服器返回,需要客戶端自行儲存。
n 虛擬磁碟路徑:storage配置的虛擬路徑,與磁碟選項store_path*對應。如果配置了store_path0則是M00,如果配置了store_path1則是M01,以此類推。
n 資料兩級目錄:storage伺服器在每個虛擬磁碟路徑下建立的兩級目錄,用於儲存資料檔案。
檔名:與檔案上傳時不同。是由儲存伺服器根據特定資訊生成,檔名包含:源儲存伺服器IP地址、檔案建立時間戳、檔案大小、隨機數和檔案拓展名等資訊。
1.4 FastDFS搭建
可以使用一臺虛擬機器來模擬,只有一個Tracker、一個Storage服務。
配置nginx訪問圖片。
1需要的工具
2 安裝fastdfs之前先安裝libevent工具包
如果沒有gcc環境,需要安裝gcc:
yum install gcc-c++
Fastdfs依賴libevent庫,需要安裝
yum -y install libevent
3 先安裝libfastcommon-1.0.7
a) 解壓縮
b) ./make.sh
c) ./make.sh install
進入usr下面
把lib64/libfastcommon.so 拷貝到lib下面
4 安裝tracker檔案
a) 解壓縮 FastDFS_v5.05.tar.gz
b) ./make.sh
c) ./make.sh install
會在usr/lib 生成一坨fdfs_*的檔案
d).把/root/FastDFS/conf配置檔案都要放在/etc/fdfs下面
cp * /etc/fdfs/
e). 配置/etc/fdfs/tracker.conf
需要修改上述路徑為自己配置的路徑 /home/fdfs/tracker
F) 啟動tracker
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart (重啟)
5 安裝storage 服務
1)如果在不同的伺服器安裝,第四部1~4步需要重新執行
2)修改/etc/fdfs/storage.conf檔案
第一個地方:
第二個地方
第三個地方
3) 啟動storage服務
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
6 測試服務
a) 修改配置檔案/etc/fdfs/client.conf
建立 /home/fastdfs/client
測試
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /root/FastDFS/conf/anti-steal.jpg
會返回上述的一個圖片路徑 拷貝進瀏覽器發現不好使
7 搭建nginx提供的http服務
可以使用官方提供的nginx外掛,要使用nginx外掛需要重新編譯
1 解壓壓縮包fastdfs-nginx-module_v1.16.tar.gz
2 修改/root/fastdfs-nginx-module/src/config檔案 把其中的local去掉
3 對nginx重新config
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/root/fastdfs-nginx-module/src
4 將/usr/lib64/libfdfsclient.so 拷貝到/usr/lib 如果不拷貝則會報錯
5 make
6 make install
7 將/root/fastdfs-nginx-module/src/mod_fastdfs.conf 複製到/etc/fdfs下面 並編輯
8 nginx的配置
在nginx的配置檔案(conf裡面的 vim nginx.conf)中新增一個Server:
server {
listen 80;
server_name 39.106.51.32; ---對應我們的IP或者阿里雲的公網IP
location /group1/M00/{
#root /home/FastDFS/fdfs_storage/data;
ngx_fastdfs_module;
}
}
圖片伺服器的使用
1 把FastDFS提供的jar包新增到工程中
2 初始化全域性配置,載入一個配置檔案
3 建立一個TrackerClient物件
4 建立一個TrackerServer物件
5 宣告一個StorageServer物件
6 獲得StorageClient物件
7 直接呼叫StorageClient物件方法上傳檔案
在專案中如何上傳檔案
Service
@Override public String updateFile(MultipartFile book_image) { try { String fileName = book_image.getOriginalFilename(); System.out.println(fileName); ClientGlobal.init("E:\\yulei xiangmu\\ssm_book\\config\\client.conf"); // 3、建立一個TrackerClient物件。 TrackerClient trackerClient = new TrackerClient(); // 4、建立一個TrackerServer物件。 TrackerServer trackerServer = trackerClient.getConnection(); // 5、宣告一個StorageServer物件,null。 StorageServer storageServer = null; // 6、獲得StorageClient物件。 StorageClient storageClient = new StorageClient(trackerServer, storageServer); // 7、直接呼叫StorageClient物件方法上傳檔案即可。 String[] strings = storageClient.upload_file(book_image.getBytes(), "jpg", null); String url = ""; for(String str : strings) { url += str + "/"; } url = "http://192.168.11.132/" + url.substring(0,url.lastIndexOf("/")); return url; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } |
Controller
@RequestMapping("/addBook1.action") public String insert1(Book book,MultipartFile book_image) throws IllegalStateException, IOException{ PictureService pictureService = new PictureServiceImpl(); String url = pictureService.updateFile(book_image); book.setBookpic(url); bookService.insertBook(book); return "redirect:findAll.action"; } |
iptables -L;iptables -F;service iptables stop 關閉防火牆