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

ASP.NET 2.0 豐富控件實戰:FileUpload 上傳元件完整攻略

     編輯:關於ASP.NET

ASP.NET 2.0 引入 FileUpload、Calendar、AdRotator、MultiView、Wizard 等豐富控件。本文聚焦 FileUpload,涵蓋基本用法、檔案型別驗證、儲存路徑管理、大檔案與安全性考量,提供可直接套用的完整範例。

FileUpload 核心屬性與方法

成員說明
HasFile布林值,判斷使用者是否已選檔案
FileName用戶端原始檔名(含路徑,僅 IE 完整)
FileBytes位元組陣列,適合直接寫入資料庫或記憶體處理
PostedFileHttpPostedFile 物件,提供 ContentLength, ContentType, InputStream
SaveAs(path)將檔案儲存至伺服器指定路徑

完整上傳範例:型別驗證 + 目錄自建 + 重新繫結

protected void btnUpload_Click(object sender, EventArgs e)
{
    if (!fuFile.HasFile) return;

    // 1. 檔案型別白名單驗證
    string ext = Path.GetExtension(fuFile.FileName).ToLower();
    string[] allowed = { ".jpg", ".jpeg", ".png", ".gif", ".pdf" };
    if (!allowed.Contains(ext))
    {
        lblMsg.Text = "不支援的檔案類型";
        return;
    }

    // 2. 確保儲存目錄存在
    string saveDir = Server.MapPath("~/Uploads/");
    if (!Directory.Exists(saveDir)) Directory.CreateDirectory(saveDir);

    // 3. 產生唯一檔名避免覆蓋
    string uniqueName = $"{Guid.NewGuid():N}{ext}";
    string fullPath = Path.Combine(saveDir, uniqueName);

    // 4. 儲存
    fuFile.SaveAs(fullPath);

    // 5. 記錄資料庫 / 重新繫結列表
    // Insert into DB: FileName, UniqueName, UploadTime, UserId...
    BindFileList();
}

進階議題與最佳實踐

大檔案上傳調整

<!-- web.config -->
<system.web>
  <httpRuntime maxRequestLength="102400" executionTimeout="600" /> <!-- 100MB, 10分鐘 -->
</system.web>
<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="104857600" /> <!-- IIS 7+ 需同步設定 (bytes) -->
    </requestFiltering>
  </security>
</system.webServer>

安全性檢查清單

  • ✅ 檔案型別驗證:副檔名 + MIME Type + 檔案簽名 (Magic Bytes) 三重檢查。
  • ✅ 儲存路徑:非 Web 可執行目錄,或設定 web.config 封鎖腳本執行。
  • ✅ 檔名處理:重新命名 (GUID/Hash),防路徑遍歷與覆蓋。
  • ✅ 權限控管:上傳目錄 移除執行權限,資料庫記錄原始檔名供下載時使用。
  • ✅ 病毒掃描:企業級系統建議整合 ClamAV 或雲端掃毒 API。

使用者體驗優化

  • 客戶端 accept 屬性限制檔案選擇對話框:<asp:FileUpload ID="fu" runat="server" accept="image/*,.pdf" />
  • 搭配 AJAX / jQuery Form Plugin 實現無刷新上傳與進度條。
  • 多檔上傳:allowmultiple="true" (HTML5) 或多個 FileUpload 控件動態產生。

結語

FileUpload 雖簡單,但生產環境需嚴謹處理安全、效能、體驗三面向。建立標準化上傳元件庫,內建驗證、重命名、日誌、掃毒管線,可大幅降低風險與維護成本。

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