萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Windows Server 2003 教學

Windows Server 2003 IIS 解決大檔案上傳失敗 (ASP 0104 / 80004005) 完整設定指南

問題現象

  • 上傳較大檔案 (超過 200KB) 失敗,錯誤:Request 對象錯誤 ASP 0104 : 80004005。
  • 或上傳看似成功,但伺服器端找不到檔案。

根本原因

IIS 6.0 (Win2003 內建) 預設限制 ASP 請求實體大小 MaxRequestEntityAllowed = 204,800 位元組 (200KB)。超過此值即拒絕請求並回傳 0x80004005。

解決步驟 (圖文詳解)

步驟 1:允許直接編輯 IIS 設定資料庫

  1. 開啟「Internet 資訊服務 (IIS) 管理員」。
  2. 右鍵 本地電腦 (本機電腦) → 「內容」。
  3. 勾選 「允許直接編輯設定資料庫」。
    IIS 管理員 - 允許直接編輯設定資料庫
  4. 點擊「確定」。

步驟 2:停止 IIS Admin Service

  1. 開啟「服務」 (services.msc)。
  2. 找到 IIS Admin Service → 右鍵「停止」。
    服務 - 停止 IIS Admin Service
  3. 確認狀態變為「已停止」。

步驟 3:修改 Metabase.xml 核心設定檔

  1. 用記事本開啟:
    %SystemRoot%\system32\inetsrv\metabase.xml (通常 C:\WINDOWS\system32\inetsrv\metabase.xml)
  2. 搜尋關鍵字:ASPMaxRequestEntityAllowed
  3. 預設值:204800 (200KB)
  4. 修改為所需大小 (位元組):
    50MB = 52428800 (建議值:51200000 略大於 50MB)
    100MB = 104857600
    200MB = 209715200
  5. 儲存檔案 (覆寫原檔)。

步驟 4:重新啟動 IIS Admin Service

  1. 回到「服務」,右鍵 IIS Admin Service → 「啟動」。
  2. 依賴服務 (W3SVC 等) 會自動跟隨啟動。

步驟 5:驗證測試

建立簡單 ASP 上傳頁面測試大檔案上傳,確認不再報錯且檔案完整寫入目標資料夾。

補充:ASP.NET (ASPX) 應用程式的設定

若為 ASP.NET 2.0+ 應用,需修改 web.config:

<configuration>
  <system.web>
    <!-- 最大要求長度 (KB),預設 4096 (4MB) -->
    <httpRuntime maxRequestLength="51200" executionTimeout="300" /> <!-- 50MB, 5分鐘逾時 -->
  </system.web>
  <system.webServer>
    <!-- IIS 7+ 安全性限制 (Win2003 IIS6 不適用,但遷移時需知) -->
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="52428800" /> <!-- 位元組 -->
      </requestFiltering>
    </security>
  </system.webServer>
</configuration>

其他相關限制 (同步調整)

  • ASPBufferingLimit:預設 4MB,緩衝區上限。大檔上傳建議同步調大 (同 Metabase.xml)。
  • ScriptTimeout:ASP 腳本執行逾時 (預設 90 秒)。大檔上傳需配合調大:
    Server.ScriptTimeout = 600 (秒) 在 ASP 程式碼中設定,或 Metabase 中 AspScriptTimeout。
  • 磁碟配額:確保上傳目錄所在分區配額未限制該用戶 (參考文章 130430)。
  • NTFS 權限:上傳目錄需給 IUSR_<機器名> 或 IIS_WPG 群組「寫入」權限。

安全性考量

  1. 不要無腦設極大值 (如 2GB),會導致惡意大量上傳癱瘓伺服器 (DoS)。依業務實際最大檔案 + 20% 緩衝設定。
  2. 檔案類型驗證:伺服端必須驗證 MIME 類型、副檔名、檔案簽名 (Magic Number),拒絕執行檔/腳本上傳。
  3. 儲存路徑隔離:上傳目錄設在非系統磁碟、非網站根目錄下,執行權限設為「無」。
  4. 防毒掃描:上傳完成觸發防毒掃描,通過再移至正式目錄。

結語

Win2003 IIS 6.0 大檔上傳失敗 99% 因 ASPMaxRequestEntityAllowed 預設 200KB 過小。依本文四步驟 (允許編輯資料庫 → 停服務 → 改 Metabase.xml → 重啟服務) 修改為業務所需值 (建議 50~100MB),並同步調整 ScriptTimeout、ASP.NET 設定與安全防護,即可徹底解決上傳瓶頸。

copyright © 萬盛學電腦網 all rights reserved