【问题标题】:Prevent IIS7/ASP.NET locking directory with images防止带有图像的 IIS7/ASP.NET 锁定目录
【发布时间】:2011-06-23 02:22:11
【问题描述】:

我有一个使用 ASP.NET MVC 2 框架的 ASP.NET webapp。它允许用户将文件上传到上传文件夹。当 Web 浏览器访问子文件夹中的图像时会出现此问题:

http://mywebapp/uploads/image_gallery/sub_folder/image.jpg

uploads 文件夹是静态的,用户不能修改,但它下面的任何内容都可以修改。

在上面的示例中,image_gallery 文件夹被锁定,因为 w3wp.exe 似乎在 sub_folder 目录上创建了一个句柄(使用 sysinternals 的进程资源管理器)。我仍然可以重命名 sub_folder 目录,并且在重命名后句柄似乎保留在其中,但我无法重命名父文件夹(在这种情况下为 image_gallery)。

我仍然可以在文件夹中浏览并查看其他图像和文件等。但无法重命名父文件夹。

因为这是使用 MVC 2 框架,所以我已将上传文件夹排除在外,如下所示:

routes.IgnoreRoute("upload/{*pathInfo}");

进入 global.asax,所以我假设 ASP.NET 直接提供这些图像(在 MVC 框架之外)

所以我想我的问题是,有没有办法阻止 IIS 将句柄放在特定目录上或强制它删除句柄?即使我指定了 ignoreroute,MVC 2 框架是否在做一些棘手的事情?

提前感谢您的任何提示!

【问题讨论】:

    标签: asp.net-mvc file-locking


    【解决方案1】:

    我遇到了同样的问题,经过大量调查我找到了罪魁祸首:

    Web.config

    <configuration>
        <system.webServer>
            <modules runAllManagedModulesForAllRequests="true">
    

    将此选项(使所有 http 模块在所有文件上运行,包括静态文件)设置为 false 为我修复了它。

    【讨论】:

      【解决方案2】:

      我相信,目录句柄是在工作处理器中创建的,因为 ASP.NET 通常会监视文件系统的更改 - 这允许它响应配置文件、新 dll 等的更改/添加。

      我建议您摆脱用户可以控制 Web 服务器上的物理目录结构的概念。通常,用户可以创建的是逻辑目录结构,但物理结构将由您的程序逻辑控制。您的逻辑将存储用户创建的逻辑结构及其与 Web 服务器上实际物理结构的映射。

      【讨论】:

      • 感谢@VinayC,这证实了我的想法——它正在跟踪文件以进行更新等。我将继续在控制器中结束对 /uploads/ 的访问,然后从那里开始。谢谢你的建议:)
      猜你喜欢
      • 2012-09-28
      • 2012-08-29
      • 2015-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      相关资源
      最近更新 更多