if (ConfigHelper.GetConfigString("SaveMode") == "Local") // 表示存儲的是本地模式 { var hostname = request.QueryString["host"] ?? ""; if (hostname.StartsWith("www.")) { hostname = hostname.Remove(0, 4); } string savePath = string.Join("\\", hostname.Split('.').Reverse()); savePath += "\\Upload\\" + GetPathRule(); string localPath = Path.Combine(HttpRuntime.AppDomainAppPath, savePath); if (!Directory.Exists(localPath)) { Directory.CreateDirectory(localPath); } string ex = Path.GetExtension(file.FileName); if (ConfigHelper.GetConfigString("SaveFileRule") == "Guid") { filename = Guid.NewGuid().ToString("N") + ex; } else { filename = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ex; } file.SaveAs(Path.Combine(localPath, filename)); filename = request.Url.Scheme + "://" + request.Url.Authority + "/" + savePath.Replace("\\", "/") + "/" + filename; }
軟件環境: vmware workstation 11 , CentO 6.5
軟件包:
由於是虛擬機環境, 建議直接登陸到root下, 由於在root下不少的操做均可以直接在界面下完成, 對於不熟悉Linux的人方便操做, 固然正式環境下, 仍是要在普通用戶下用終端來操做。
1. 複製FastDFS_v5.05.tar.gz、libfastcommon.master.zip、nginx-1.8.0.tar.gz到root文件夾下並解壓
2. 複製pcre-8.34.tar.gz、zlib-1.2.8.tar.gz、fastdfs-nginx-module_v1.16.tar.gz到/usr/local/src文件夾下並解壓
3. 新建fastDFS用戶存儲日誌和數據的文件夾,以及nginx文件夾
1. 在/opt文件夾下新建tracker文件夾
2. 在/opt文件夾下新建storage_info文件夾
3. 在/opt文件夾下新建storage_data文件夾
4. 在/opt文件夾下新建client文件夾
5. 在/usr/local下新建nginx文件夾
4. 在終端中執行yum install -y gcc
yum install -y gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
5. 進入到/root文件夾下解壓後的libfastcommon-master文件夾, 執行./make.sh,執行成功後,再執行./make.sh install,若是沒有錯誤, 則libfastcommon安裝成功
注意,上述安裝的路徑在/usr/lib64/,可是FastDFS主程序設置的lib目錄是/usr/local/lib,因此須要建立軟鏈接以下:
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
6. 進入到root文件夾下解壓後的FastDFS文件夾,執行./make.sh,執行成功後,再執行./make.sh install,若是沒有錯誤而且在/etc/fast文件夾下能找到配置文件(client.conf.simple,storage.conf.simple,tracker.conf.simple), 則表示安裝成功。
7. 進入到/etc/fast文件夾下
1.將tracker.conf.simple重命名爲tracker.conf,其實就是把.simple去掉,打開該文件並修改
base_path=/opt/tracker #即剛纔在/opt文件夾下建立的tracker文件夾路徑
2.將storage.conf.simple重命名爲storage.conf,打開該文件並修改
base_path=/opt/storage_info #即剛纔在/opt文件夾下建立的storage_info文件夾
store_path0=/opt/storage_data #即剛纔在/opt文件夾下建立的storage_data文件夾
tracker_server=192.168.1.104:22122 #IP地址就是tracker地址, 若是是分佈式部署,則填寫tracker的IP地址, 若是是單機部署則填寫本機地址
3.client.conf.simple重命名爲client.conf,打開該文件並修改(這一步並不是必須, 主要是爲了測試軟件是否安裝成功)
base_path=/fdfs/client #即剛纔在/opt文件夾下建立的client文件夾路徑
tracker_server=192.168.1.104:22122 #IP地址就是tracker地址, 若是是分佈式部署,則填寫tracker的IP地址, 若是是單機部署則填寫本機地址
http.tracker_server_port=8080
8. 進入/user/bin文件夾, 右鍵啓動終端,在終端中執行以下命令
fdfs_trackerd /etc/fdfs/tracker.conf start #能夠在/opt/tracker文件夾下看日誌輸出是否正常
fdfs_storaged /etc/fdfs/storage.conf start #能夠在/opt/storage_info文件夾下看日誌輸出是否正常,並在/opt/storage_data文件夾下看是否有文件夾被建立
fdfs_test /etc/fdfs/client.conf upload /root/1.jpg #上傳文件 這個1.jpg須要事先存在
執行完上面第三步, 正常狀況下, 會返回一個http://192.168.1.104:8080/group1/M00.....jpg 的地址,這就表示已經上傳成功,FastDFS也正常安裝, 可是這個地址並不能訪問, 想要訪問, 還須要安裝nginx和fastdfs-nginx-module
9. 關於ginx, 在http://www.cnblogs.com/PurpleDream/p/4510279.html 這篇博文中已經提到storage和tracker都是須要安裝ngxin的,storage中安裝nginx,主要是爲了爲提供http的訪問服務,同時解決group中storage服務器的同步延遲問題。而tracker中安裝nginx,主要是爲了提供http訪問的反向代理、負載均衡以及緩存服務,若是是單機環境, 也應該是啓動兩個nginx實例的, 可是這裏爲了簡化, 我只爲storage安裝了nginx。
進入到/usr/local/src文件夾下的fastdfs-nginx-modul文件夾, 進入到src, 打開並編輯config
找到包含CORE_INCS這個一行,將路徑中local所有去掉,變爲CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
進入到/root文件夾下解壓後的nginx-1.8.0文件夾下, 右鍵打開終端, 在終端中執行
./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/fastdfs-nginx-module/src --with-pcre=/usr/local/src/pcre-8.34/ --with-zlib=/usr/local/src/zlib-1.2.8
成功後, 依次執行make、 make install
10.進入到/root/FastDFS/config, 將目錄下面的http.conf和mime.types複製到/etc/fdfs/下
進入到/usr/local/src/文件夾下的,找到astdfs-nginx-module/src下的mod_fastdfs.conf這個文件複製到 /etc/fdfs 下
11.打開剛剛複製到/etc/fdfs 的mod_fastdfs.conf,修改以下:
base_path=/opt/storage_info #即剛纔在/opt文件夾下建立的storage_info文件夾
tracker_server=192.168.1.104:22122 #tracker服務器的IP地址以及端口號
url_have_group_name= true #文件url中是否有group名
store_path_count=1 #存儲路徑個數,須要和store_path個數匹配
store_path0=/opt/storage_data #即剛纔在/opt文件夾下建立的storage_data文件夾
http.need_find_content_type=true #從文件擴展名查找文件類型(nginx時爲true) 注意:這個配置網上通常都會列出,可是在fastdfs5.05的版本中是沒有的
[group1] #取消註釋
group_name=group1 #取消註釋
storage_server_port=23000 #取消註釋
store_path_count=1 #取消註釋並修改
storage_path0=/opt/storage_data #取消註釋並修改
在文件的底部有兩個group能夠配置, 由於咱們默認只有一個group, 因此對第一個group取消註釋,並修改,其餘保持不變。
12.進入/usr/local/nginx/conf,修改 nginx.conf
listen 8080;
在server段中添加:
location ~/group1/M00{
root /opt/storage_data/data;
ngx_fastdfs_module;
}
在終端中創建軟鏈接 ln -s /opt/storage_data/data /opt/storage_data/data/M00
13.執行完以上步驟後, 軟件就算安裝完成, 在終端中執行以下命令,
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart #重啓tracker
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart #重啓storage
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf #重啓nginx
14.打開centOS瀏覽器, 輸入182.168.1.104:8080應該可以看到nginx的頁面, 輸入咱們剛纔獲得的http://192.168.1.104:8080/group1/M00.....jpg的地址, 若是窗口關閉, 則能夠從新上傳一次, 將返回的地址複製到瀏覽器, 就應該能夠看到上傳的圖片
15. 若是想要在實體機上訪問上述地址, 並可以執行上傳操做, 須要打開端口
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 22122 -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 23000 -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
/etc/init.d/iptables save #保存
執行完成後,就應該能夠在實體機的瀏覽器中訪問剛纔的圖片地址。
byte[] fileData; using (var binaryReader = new BinaryReader(file.InputStream)) { fileData = binaryReader.ReadBytes(file.ContentLength); } var storageNode = FastDFSClient.GetStorageNode(FastDfsGlobalConfig.Config.GroupName); var fileName = FastDFSClient.UploadFile(storageNode, fileData, Path.GetExtension(file.FileName).TrimStart('.')); return ConfigHelper.GetConfigString("TrackerHost") + FastDfsGlobalConfig.Config.GroupName + "/" + fileName;