首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

ASP.NET Web Forms 檔案上傳完整實作:C# 後端處理與前端配置指南

     編輯:關於C語言

前端頁面配置關鍵點

1. 表單編碼屬性(必要)

<form method="post" enctype="multipart/form-data" runat="server">

缺少 enctype="multipart/form-data" 將導致上傳失敗,這是瀏覽器以多部分表單編碼傳送二進位檔案的必要條件。

2. 檔案上傳控制項轉為伺服器控制項

<!-- HTML 控制項 -->
<input id="uploadFile1" type="file" size="49" runat="server" />

<!-- 或使用 ASP.NET Web 控制項 (建議) -->
<asp:FileUpload ID="uploadFile1" runat="server" />

多檔案上傳可放置多個 <input type="file"> 或 FileUpload 控制項。

後端 C# 上傳處理核心程式碼


protected void btnUpload_Click(object sender, EventArgs e)
{
    // 1. 目標儲存目錄(實際部署請從設定檔讀取)
    string basePath = @"D:\Web\FC\pic\";
    
    // 2. 檢查是否有檔案且長度 > 0
    if (uploadFile1.PostedFile.ContentLength > 0)
    {
        // 3. 產生唯一檔名:日期 + 檔案大小 + 副檔名
        DateTime now = DateTime.Now;
        string fileName = $"{now.DayOfYear}{uploadFile1.PostedFile.ContentLength}.jpg";
        string fullPath = Path.Combine(basePath, fileName);
        
        // 4. 儲存檔案
        uploadFile1.PostedFile.SaveAs(fullPath);
        
        // 5. 回饋結果
        lblMessage.Text = $"圖片已上傳,檔名:{fileName}";
        
        // 6. (選擇性) 寫入 XML 記錄檔案資訊
        // XmlNavigator 相關程式碼略...
    }
    else
    {
        lblMessage.Text = "請選擇要上傳的檔案";
    }
}

關鍵物件屬性與方法對照

屬性/方法說明
PostedFileHttpPostedFile 物件,代表上傳的檔案
PostedFile.ContentLength檔案大小(位元組),0 表示未選檔案
PostedFile.FileName用戶端原始完整路徑(僅 IE 完整回傳,其他瀏覽器僅檔名)
PostedFile.ContentTypeMIME 類型(如 image/jpeg、application/pdf)
PostedFile.SaveAs(path)將檔案儲存至伺服器指定路徑
PostedFile.InputStream檔案資料流,可直接讀取處理而不落地

重要注意事項與最佳實務

1. 檔案大小限制

<!-- Web.config 設定最大請求長度 (KB),預設 4096 KB = 4MB -->
<system.web>
    <httpRuntime maxRequestLength="10240" />  <!-- 10MB -->
</system.web>

IIS 7+ 另需設定 security/requestFiltering/requestLimits maxAllowedContentLength(位元組為單位)。

2. IIS 權限與安全性

  • 上傳目錄需授予 IIS_IUSRS 或應用程式集區身分 寫入權限
  • 嚴禁將上傳目錄設為可執行(移除 Script/Execute 權限),防止上傳惡意腳本執行
  • 驗證檔案類型:檢查 ContentType、副檔名、檔案標頭(Magic Number)
  • 重新命名檔案(如範例用日期+大小),避免覆蓋與路徑遍歷攻擊

3. 部署路徑問題

使用 Server.MapPath("~/Uploads/") 取得實體路徑,避免硬編碼絕對路徑導致部署失敗。

4. 檔案重名處理

  • GUID:Guid.NewGuid().ToString() + ext
  • 時間戳 + 隨機數:DateTime.Now.Ticks + new Random().Next(1000)
  • 資料庫記錄原始檔名,實體檔案用唯一識別碼

5. 其他檔案類型支援

將副檔名 .jpg 改為 .doc、.pdf、.xlsx 等即可上傳對應類型。瀏覽器可直接預覽支援格式(PDF、圖片、Office 線上檢視器)。

現代化替代方案建議

  • ASP.NET Core:使用 IFormFile 介面、CopyToAsync 非同步儲存
  • 大檔案分片上傳:前端切片(如 Uppy、DropzoneJS)、後端合併
  • 雲端儲存:Azure Blob Storage、AWS S3 直接上傳(預簽 URL),減輕 Web 伺服器頻寬
  • 安全性掃描:整合防毒掃描、檔案內容分析

經典 ASP.NET Web Forms 範例環境

本範例於 Visual Studio .NET Beta 2 中文版 開發測試,核心 API (HttpPostedFile, SaveAs) 至今仍向相容,可直接套用於維護專案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved