【问题标题】:How do I enable upload of large files in classic ASP on IIS 7?如何在 IIS 7 上启用经典 ASP 中的大文件上传?
【发布时间】:2010-01-01 19:11:51
【问题描述】:

最近我不得不让一个旧的 ASP 应用程序在 W2K8 服务器上的 IIS 7.5 中运行。几乎一切正常,除了我似乎无法让它接受大于~200kB 的上传。我确实找到了一个设置,根据我的理解应该是诀窍,在 applicationHost.config 中,我将最大请求大小设置为 100 MB,如下所示:

<location path="TheNameOfMySite">
    <system.webServer>
        <security>
            <requestFiltering>
                <requestLimits maxAllowedContentLength="104857600" />
            </requestFiltering>
        </security>
    </system.webServer>
</location>

不幸的是,这似乎什么也没做,它仍然拒绝接受任何大于约 200 KB 的文件,并且在日志文件中它给出了以下错误消息:

ASP_0104_:_80004005|Operation_not_Allowed

谷歌搜索指向增加maxAllowedContentLength,就像我在上面所做的那样。所以我的想法很新鲜,但相信聪明的stackoverflow人群可以在比我写这个问题的时间更短的时间内解决这个问题。

【问题讨论】:

  • 你在正确的轨道上,更改 maxAllowedContentLength 不仅会影响经典 ASP 的所有请求,而且不会更改 maxRequestEntityAllowed (默认为 200 KB)您仍然会看到ASP 0104 : 80004005 Operation Not Allowed。请参阅this answer,了解如何在 Classic ASP 中配置大型上传。

标签: iis iis-7 asp-classic


【解决方案1】:

maxAllowedContentLength 控制允许在响应中发送多少数据。但是,您想控制请求中可以接受的数量。这由配置文件的asp 部分中的limits 元素的maxRequestEntityAllowed 属性处理。一个示例可能如下所示:-

<system.webServer>
  <asp>
     <cache diskTemplateCacheDirectory="%SystemDrive%\inetpub\temp\ASP Compiled Templates" />
     <limits scriptTimeout="00:02:00"
        queueConnectionTestTime="00:00:05"
        requestQueueMax="1000"
        maxRequestEntityAllowed="104857600"
        />
  </asp>

您可以在 ASP 功能的属性网格中的“限制属性”类别下的 IIS7 管理器中进行配置。或者,您可以使用命令行:-

appcmd set config /section:asp /limits.maxRequestEntityAllowed:104857600

请注意,扩展此值会增加 DOS 攻击的窗口,在该窗口中,攻击者会将大量内容发送到服务器,因此不要试图将其扩展至超出您真正需要的范围。

【讨论】:

  • 看来我对 Stack Overflow 人群的信任并没有错!这解决了问题,非常感谢!奇怪的是,你会认为 requestLimits 设置会影响请求而不是响应......
  • 干杯安东尼,有同样的问题,这也为我解决了。
  • @Johan Driessen:stackoverflow - 永远不要失去对它的信任!
  • 编辑将配置标志更改为:/limits.maxRequestEntityAllowed:104857600
  • 最后,一个有效的命令提示符命令(使用%windir%\system32\inetsrv\appcmd)。非常感谢。
【解决方案2】:

在 Windows 2008 上 - 进入管理工具 - 服务器管理器 - 展开角色 - 展开 Webserver - 单击 IIS - 并查找要更改文件大小限制的 Web 实例,然后进入选项“ASP”展开“限制属性”,您需要更改的属性是“最大请求实体主体限制”。文件大小始终以字节为单位,因此请使用任何在线计算器来计算字节到 KB 或 MB 的转换。

【讨论】:

    【解决方案3】:

    首先@AnthonyWJonesanswer 非常有帮助,但没有解决我的问题,事实上它有点不准确,因此我正在写这篇文章。

    IIS 6 中的大量上传是一件轻而易举的事,您只需担心一个配置值

    AspMaxRequestEntityAllowed

    AspMaxRequestEntityAllowed 属性指定 ASP 请求的实体正文中允许的最大字节数。如果存在 Content-Length 标头并指定的数据量大于 AspMaxRequestEntityAllowed 的值,则 IIS 返回 403 错误响应。此属性在功能上与 MaxRequestEntityAllowed 相关,但特定于 ASP 请求。虽然您可以在通用万维网发布服务(WWW 服务)级别将 MaxRequestEntityAllowed 属性设置为 1 MB,但您可以选择将 AspMaxRequestEntityAllowed 设置为较低的值,如果您知道您的特定 ASP 应用程序处理的数据量较少。


    随着 IIS 7 的引入,以及使用 *.config 文件的基于 XML 的新分层配置系统,这一切都变得更加复杂了。

    现在,您需要正确配置两个设置,然后大文件上传才能按预期工作,并且它们都位于配置的不同区域。

    ma​​xRequestEntityAllowed

     <configuration>
       <system.webServer>
         <asp>
           <limits maxRequestEntityAllowed="200000" />
         </asp>
       <system.webServer>
     <configuration>
    

    maxRequestEntityAllowed 属性指定 ASP 请求的实体正文中允许的最大字节数。如果存在 Content-Length 标头并指定的数据量大于 ma​​xRequestEntityAllowed 的值,则 IIS 将返回 HTTP 403 错误响应。

    重要提示: 配置上述设置将在一定程度上起作用,正如您从下面的默认值中看到的那样,但是一旦达到该默认值,无论 maxRequestEntityAllowed 设置为什么,服务器都会以 HTTP 404 Not Found 错误响应进行响应。起初这让我很困惑,因为我认为返回 404 错误响应的一定是我的代码。

    ma​​xAllowedContentLength

     <configuration>
       <system.webServer>
         <security>
           <requestFiltering>
             <requestLimits maxAllowedContentLength="30000000" />
           </requestFiltering>
         </security>
       </system.webServer>
     </configuration>
    

    指定请求中内容的最大长度,以字节为单位。默认值为 30000000,大约为 28.6MB。

    这个设置非常重要,因为它定义了 IIS 请求中的最大字节数(而不是像之前的配置值那样的 ASP 请求)它与响应的内容长度无关 (如前所述)。无论maxRequestEntityAllowed(这是一个 特定设置)设置为什么,如果maxAllowedContentLength 未设置或您尝试上传更多的默认值28 MB(大约),您将收到HTTP 404 错误回应。

    链接

    【讨论】:

      【解决方案4】:

      对于无法从 CMD 执行 appcmd 命令的用户,您需要将路径更改为 C:\windows\system32\inetsrv,因为该命令位于该文件夹中。

      【讨论】:

      • 或者添加PATH环境变量的路径,以备后用。
      【解决方案5】:

      这里接受的解决方案对我不起作用。首先,我的配置中没有指定元素,我不想搞砸配置文件。

      我也试过@shoaib-suleman'ssolution,但也没有用。最后,我遇到了此处显示的解决方案,并且成功了。

      1. 打开 IIS 7 管理单元

      2. 选择您要启用以接受大文件上传的网站。

      3. 在主窗口中双击“请求过滤”

      4. 打开窗口后,您可能会在顶部看到一个选项卡列表,例如:文件扩展名、规则、隐藏段等...

        无论您选择哪个选项卡,在主窗口中,右键单击以显示弹出上下文菜单。 在菜单中选择“编辑功能设置”。

      5. 在弹出的表单上,修改“最大允许内容长度(字节)”

      【讨论】:

      • 请参阅this answer,了解为什么这样做以及在 IIS 7+ 中出现的常见错误。
      【解决方案6】:

      进入 IIS,选择您的站点并展开它,然后单击右侧面板中的 ASP 图标。

      打开“限制属性”图标,将“最大请求实体正文限制”中的值更改为大于 200000 (200kb) 的值。 2000000 大约是 2mb,20000000 大约是 20mb。根据您的需要设置并申请。 就是这样!

      享受..

      【讨论】:

        猜你喜欢
        • 2011-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-17
        相关资源
        最近更新 更多