【问题标题】:How to store & retrieve uploaded images across Load Balanced servers with ASP.NET?如何使用 ASP.NET 跨负载平衡服务器存储和检索上传的图像?
【发布时间】:2026-01-29 10:00:02
【问题描述】:

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

目前我正计划将这些保存到共享存储位置,特别是引用我们 NAS 上的目录的 UNC 路径;但我不确定如何最好地检索这些文件以将它们显示给客户端。我想我需要编写某种自定义路由处理程序,以从服务器端的不可 Web 访问的存储位置检索它们,然后将它们流式传输回客户端。这似乎相对简单,但我正在为如何开始在 ASP.NET 中处理这个问题而苦苦挣扎。

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

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

您推荐哪种方法,是否有既定的最佳实践,甚至现有的组件/库可用于完成此类事情?

【问题讨论】:

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


【解决方案1】:

在 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 扩展方法来减少出错的可能性。

【讨论】:

    【解决方案2】:

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

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

    2.将文件上传到像 //192.168.1.1/upload 这样的网络地址,并在 iis 上托管一个网站,比如 img.domain.com,而不是 img url 使用这个域
    文件不重复,请确保浏览器可以找到。img 域不平衡

    或将文件上传到云服务

    【讨论】:

      最近更新 更多