.Net簡單圖片系統-本地存儲和分佈式存儲

所謂本地存儲就是將上傳圖片保存到圖片服務器的本地磁盤上。
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;
            }  
View Code
 
1. 在本地存儲模式中,爲了區分不一樣業務網站上傳的圖片,這裏使用了域名作爲圖片存儲路徑的一部分,好比域名爲 www.yourdomain.com , 則上傳圖片存儲路徑應該是這樣\com\yourdomain (www省略),若是是passport.yourdomain.com,則存儲路徑爲\com\yourdomain\passport。
2. 同時爲了方便歸類,用時間方式進行了文件分組,支持YYYY, YYYYYMM,YYYYYMMDD三種模式,若是選擇是YYYY,則一全年的圖片都將保存在2015這個文件夾下。 
3. 對於文件名稱,也有兩種方式命名,Guid 和Time ,Time精確到毫秒。 
最後將圖片路徑返回。
 
分佈式存儲重點是FastDFS的搭建,須要使用Linux系統, 這裏使用了CentOS6.5版本, 使用虛擬機安裝。 
安裝文件
 
安裝步驟
軟件環境: 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  #保存
    執行完成後,就應該能夠在實體機的瀏覽器中訪問剛纔的圖片地址。
   
   
執行完上述步驟後,咱們已經成功安裝了FastDFS,正式環境的安裝能夠參考 http://www.cnblogs.com/PurpleDream/p/4510279.html
 
.Net驅動
FastDFS有.Net的驅動,能夠在nuget上下載,源碼託管在Gtihub上,裏面有Demo,你能夠參考Demo來驗證上述環境安裝是否正常,本次使用的也是這個驅動。
 
接下來的事情就比較簡單了,就是將上傳的圖片保存到FastDFS中。 
修改配置:
 
上傳圖片, 直接調用對應方法就能夠了。 
 
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;  
View Code
相關文章
相關標籤/搜索