<form method="post" enctype="multipart/form-data" runat="server">
缺少 enctype="multipart/form-data" 將導致上傳失敗,這是瀏覽器以多部分表單編碼傳送二進位檔案的必要條件。
<!-- HTML 控制項 -->
<input id="uploadFile1" type="file" size="49" runat="server" />
<!-- 或使用 ASP.NET Web 控制項 (建議) -->
<asp:FileUpload ID="uploadFile1" runat="server" />
多檔案上傳可放置多個 <input type="file"> 或 FileUpload 控制項。
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 = "請選擇要上傳的檔案";
}
}
| 屬性/方法 | 說明 |
|---|---|
PostedFile | HttpPostedFile 物件,代表上傳的檔案 |
PostedFile.ContentLength | 檔案大小(位元組),0 表示未選檔案 |
PostedFile.FileName | 用戶端原始完整路徑(僅 IE 完整回傳,其他瀏覽器僅檔名) |
PostedFile.ContentType | MIME 類型(如 image/jpeg、application/pdf) |
PostedFile.SaveAs(path) | 將檔案儲存至伺服器指定路徑 |
PostedFile.InputStream | 檔案資料流,可直接讀取處理而不落地 |
<!-- Web.config 設定最大請求長度 (KB),預設 4096 KB = 4MB -->
<system.web>
<httpRuntime maxRequestLength="10240" /> <!-- 10MB -->
</system.web>
IIS 7+ 另需設定 security/requestFiltering/requestLimits maxAllowedContentLength(位元組為單位)。
IIS_IUSRS 或應用程式集區身分 寫入權限ContentType、副檔名、檔案標頭(Magic Number)使用 Server.MapPath("~/Uploads/") 取得實體路徑,避免硬編碼絕對路徑導致部署失敗。
Guid.NewGuid().ToString() + extDateTime.Now.Ticks + new Random().Next(1000)將副檔名 .jpg 改為 .doc、.pdf、.xlsx 等即可上傳對應類型。瀏覽器可直接預覽支援格式(PDF、圖片、Office 線上檢視器)。
IFormFile 介面、CopyToAsync 非同步儲存本範例於 Visual Studio .NET Beta 2 中文版 開發測試,核心 API (HttpPostedFile, SaveAs) 至今仍向相容,可直接套用於維護專案。