如何存储&使用ASP.NET在Load Balanced服务器上检索上传的图像?

时间:2014-01-10 00:33:02

标签: c# asp.net asp.net-mvc iis cdn

我的ASP.NET MVC应用程序将部署到一系列负载均衡的Web服务器上。我还在解决的一个问题是如何处理动态上传的文件内容,例如用户上传的图像 - 显然,将它们保存在上传它们的服务器上将不允许从其他服务器访问它们。负载平衡组。

目前我打算将这些保存到共享存储位置,特别是指向我们NAS上的目录的UNC路径;但我不确定如何最好地检索这些文件以将其显示给客户端。我想我需要编写某种自定义路由处理程序,从服务器端的非Web可访问存储位置检索它们,然后将它们流回客户端。这似乎相对简单,但我正在努力解决如何在ASP.NET中开始这样做。

我考虑的另一个解决方案是在每个应用程序目录中创建一个指向网络目录的虚拟目录。

我甚至考虑将文件上传到Amazon S3(通过文件上传处理代码)并使用CloudFront传递它们,但我宁愿避免外部服务依赖。

您建议使用哪种方法,是否已建立最佳实践,甚至现有的组件/库可用于完成此类事情?

2 个答案:

答案 0 :(得分: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扩展方法,以便在你使用它时不那么容易出错。

答案 1 :(得分:0)

我认为有两种方法可以解决它

1.在机器之间使用工具同步文件
它使重复文件,每台机器有相同的文件

2.upload文件到网址如//192.168.1.1/upload,并在iis上托管一个网站,比如img.domain.com,比img url使用这个域名
文件不重复,所以你应该确保浏览器可以找到它.img域名不平衡

或将文件上传到云服务