2014-01-10 25 views
1

我的ASP.NET MVC應用程序將被部署到一系列負載平衡的Web服務器。我仍然在研究的一個問題是如何處理動態上傳的文件內容,例如用戶上傳的圖像 - 顯然,將它們保存在上傳的服務器上將不允許從其他服務器訪問它們負載平衡組。如何使用ASP.NET存儲和檢索負載均衡服務器上傳的圖像?

目前我打算將這些文件保存到共享存儲位置,特別是指代我們NAS上的目錄的UNC路徑;但我不確定如何最好地檢索這些文件以將它們顯示給客戶端。我想我需要編寫某種自定義路由處理程序,以便從服務器端的非Web可訪問的存儲位置檢索它們,然後將它們流式傳輸回客戶端。這似乎相對簡單,但我正在努力如何開始在ASP.NET中接近這一點。

我考慮過的另一個解決方案是在每個指向網絡目錄的應用程序目錄中創建一個虛擬目錄。

我甚至考慮過將文件上傳到Amazon S3(通過文件上傳處理代碼)並使用CloudFront交付它們,但我寧願避免外部服務依賴性。

您推薦哪種方法,並且是否建立了最佳實踐,甚至是現有的可用於完成此類事情的組件/庫?

+0

我編輯了你的問題,看看爲什麼:http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles –

+0

然而你已經讓我的問題少了明確。我現在根據Jeff Atwood的反饋修改了標題(http://meta.stackexchange.com/questions/103563/can-we-prevent-titles-with-an-unnecessary-tag-in-them/105991# 105991)。 –

回答

2

在ASP.NET MVC你可以用一個控制器動作處理這個問題,像這樣:

public class SharedImageController : Controller { 

    public ActionResult GetImage(String imageId) { 

     String uncPath = GetImageUncLocationFromId(imageId); 

     Response.ContentType = "image/jpeg"; // change as appropriate 
     return new FileResult(uncPath); 
    } 
} 

,並在你的HTML:

<img src="<%= Url.Action("GetImage", "SharedImage", new { imageId = "SomeImage.jpg" } %>" alt="Some descriptive text" /> 

你可以做一個自定義的HtmlHelper擴展方法,使如果你使用這個很少,這個錯誤就少了。

0

我認爲有2種方法來解決它

1.使用機器
之間的工具同步文件,它讓重複的文件,每臺機器都有相同的文件

2.upload文件到一個網絡地址像//192.168.1.1/upload,並且在iis上主持一個像img.domain.com的網站,而不是img url使用這個域名
文件不重複,所以你應該確保瀏覽器能夠找到它。img域不平衡

或將文件上傳到雲服務