GIT 託管地址 DotNetMultiServerUploadgit
#DotNetMultiServerUploadgithub
此程序爲圖片上傳程序,須要windows IIS .net 運行環境web
windows server 2008 r2json
.net framework 4.5windows
iis 7.5安全
支持多圖片上傳,多服務器備份服務器
圖片服務器有幾十個GB的圖片網絡
服務器有不少不穩定因素,app
如:.net
硬盤會壞掉
機房會斷電
白名單會丟失
……
當發生上述狀況的時候再去遷移服務器,就很困難
這些問題均可能致使圖片服務器沒法訪問的窘境,
爲了加強用戶體驗,就要考慮到上述問題,對圖片作好實時備份
DotNetMultiServerUpload 就是專門爲解決這些問題而誕生
須要的硬件環境
部署環境
【第一步】
分別在 主服務器 和 備份服務器上創建 一個站點
並綁定域名 i-1.xx.com 把站點命名爲 i-1.xx.com (根據須要綁定你本身的域名)
同時 在主服務器 站點 i-1.xx.com 上再綁定一個域名 s1.i-1.xx.com
在備份服務器站點 i-1.xx.com 上再綁定一個域名 s2.i-1.xx.com
在域名管理系統裏面把域名解析至對應服務器
s1.i-1.xx.com 綁定至主服務器 s2.i-1.xx.com 綁定至備份服務器 i-1.xx.com 綁定至主服務器
若是主服務器出現故障,就把域名(i-1.xx.com)再解析至備份服務器
【第二步】
把程序放置在兩臺服務器 站點i-1.xx.com 下面,修改配置文件 /web.config 和 /servers.xml
/web.config
<?xml version="1.0"?> <!-- 有關如何配置 ASP.NET 應用程序的詳細信息,請訪問 http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <appSettings> <!--當前服務器名稱 對應 servers.xml--> <add key="ServerName" value="s1"/> <!--備份服務器列表配置文件--> <add key="Servers" value="/servers.xml"/> <!--當前服務器安全密鑰--> <add key="SecurityKey" value="asdfdsfsdf"/> <!--日誌所在目錄--> <add key="Log" value="/log"/> <!--當前服務器域名--> <add key="Domain" value="http://i-2.xx.com"/> </appSettings> <!-- 有關 .NET 4.5 的 web.config 更改的說明,請參見 http://go.microsoft.com/fwlink/?LinkId=235367。 可在 <httpRuntime> 標記上設置如下特性。 <system.Web> <httpRuntime targetFramework="4.5" /> </system.Web> --> <system.web> <customErrors mode="Off"/> <compilation debug="true" targetFramework="4.5"/> <pages controlRenderingCompatibilityVersion="4.0"/> </system.web> </configuration>
/servers.xml
<?xml version="1.0" encoding="utf-8" ?> <Servers> <!--備份服務器1--> <Server Name="s1" Uri="http://s1.i-2.upload.xx.com/do.ashx" SecurityKey="asdfdsfsdf" /> <!--備份服務器2--> <Server Name="s2" Uri="http://s2.i-2.upload.xx.com/do.ashx" SecurityKey="asdfdsfsdf" /> </Servers>
整套程序分爲幾個部分
部署好程序以後,就能夠經過地址 http://i-1.xx.com/.m/upload.aspx 去上傳圖片
或 http://s1.i-1.xx.com/.m/upload.aspx 上傳圖片 或 http://s2.i-1.xx.com/.m/upload.aspx 上傳圖片
不管使用哪一個地址,程序都會自動把圖片合併同步至另外的服務器上面
固然在合併同步另外的服務器的時候 也可能會遇到 網絡問題或服務器問題,致使同步失敗的可能
這種狀況 DotNetMultiServerUpload 是考慮到的,當出現上述問題致使同步失敗的時候,
程序就會建立 日誌文件,記錄上傳失敗的文件信息和服務器信息,
能夠在服務器端制定一個計劃任務,按期的去處理錯誤
按期去執行這兩個地址,就能夠把上傳失敗的文件再次同步至其餘服務器
http://s1.i-1.xx.com/do.ashx?action=uploaderrors&SecurityKey=asdfdsfsdf
http://s2.i-1.xx.com/do.ashx?action=uploaderrors&SecurityKey=asdfdsfsdf
上傳能夠經過 /.m/upload.aspx 去上傳
也能夠接入至其餘後臺中
只需把圖片上傳至
http://i-1.xx.com/do.ashx?action=upload&SecurityKey=asdfdsfsdf
便可
如C#代碼實現:
string SecurityKey = "asdfdsfsdf"; string format = "xml"; //or json WebClient wc = new WebClient(); byte[] data = wc.UploadFile("http://i-1.xx.com/do.ashx?action=upload&format=" + format + "&SecurityKey=" + SecurityKey, @"D:\xx.jpg"); wc.Dispose(); string xml = System.Text.Encoding.GetEncoding("utf-8").GetString(data); /* 返回成功結果: XML: <resp> <success>1</success> <link>http://i-1.xx.com/2014/4/15/5310bcaf-0f8a-45c5-9a61-9bf45b5e09c1.jpg</link> </resp> JSON: {"resp":{"success":1,"link":"http://i-1.xx.com/2014/4/15/5310bcaf-0f8a-45c5-9a61-9bf45b5e09c1.jpg"}} */