上傳圖片至多服務器,圖片共享問題

問題描述

Web服務器有多個,訪問網站時隨機指定一個服務器提供訪問服務。

那麼當我們涉及到對數據庫的Select、Update、Delete以及Insert就需要指定一個數據庫了。實現方法完全可以通過設置配置文件來完成。比如:

<appSettings>
    <add key="DBTYPE" value="MySQL" />
    <add key="MySQL" value="Database=wldb;Data Source=172.16.1.11;User Id=dahong;Password=dh;pooling=false;CharSet=utf8;port=3306" />
  </appSettings>

就是令數據庫連接字符串都指向同一個web服務器(或者數據庫服務器)。

但是當我們上傳圖片時,就麻煩了。比如在服務器端接收到圖片後,我是這樣保存的:

//讀取照片
        HttpPostedFile file =HttpContext.Current.Request.Files[0];
        string fileName = string.Empty;
        string ext = string.Empty;//文件後綴名
        string filePath = string.Empty;
       
        if (file.ContentLength != 0)
        {
            <strong>filePath = Context.Server.MapPath("~/photo/");</strong>
            fileName = Path.GetFileName(file.FileName);
            ext = Path.GetExtension(file.FileName).ToLower();
            if (!ext.Equals(".jpg") && !ext.Equals(".gif") && !ext.Equals(".png") && !ext.Equals(".bmp"))
            {
                Context.Response.Write("{\"count\":\"0\",\"records\":\"照片格式不正確,上傳失敗!\"}");
                return;
            }
            if (file.ContentLength > 10485760)
            {
                Context.Response.Write("{\"count\":\"0\",\"records\":\"照片大於10M,上傳失敗!\"}");
                return;
            }
            file.SaveAs(filePath + xkzzh + ext);
        }

按照我所寫的,這樣圖片會保存到服務器端應用程序下面的photo文件夾下。Here:



這樣的話。。。我要是有多個服務器,圖片就是不是隨機保存到某一臺服務器上,這完全是靠運氣訪問之前的圖片嘛抓狂


顯然不合理,那麼我採用和數據庫同樣的訪問方式試試呢?我令

filePath = "http://172.16.1.11/wl/photo/";

是不可以的,SaveAs 會報錯的。SaveAs 方法被配置爲需要根路徑


解決方案


最後同事給出了他們之前的解決方案:在存儲圖片的服務器上將photo設置爲共享。在其他服務器上的應用程序下刪除原有的photo,並建立photo虛擬目錄。

下面是具體做法:

1.設置共享文件夾


在存放圖片的服務器上設置共享文件夾——就是那個photo文件夾


注:當你發佈到網站後出現輸入框要求輸入用戶名密碼時


那麼,就需要爲共享文件夾添加權限:Everyone的讀寫權限

2.刪除多餘的同名文件夾


將其他服務器上的應用程序下的photo刪除

3.建立虛擬目錄


在其他服務器上的應用程序下,建立虛擬目錄


需要注意:

1.虛擬目錄的名稱必須和原有名稱一致,例如這裏必須是"photo"

2.物理路徑必須指向圖片服務器下的photo文件夾,必須可訪問

3.必須可訪問可以通過設置身份驗證方式,如下:

這裏的用戶名、密碼都是訪問圖片服務器的用戶名和密碼。比如我這裏就是和遠程登錄的用戶名和密碼一致。

4.設置配置文件


這樣就設置好了,但運行時還是出錯,好像是權限問題。可以通過設置配置文件來解決。在配置文件中加入:

<identity impersonate="true" userName="Administrator" password="mima"/>

5.原有的程序代碼不用修改


奏是這麼任性!


總結


OK,可以咯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章