將本地檔案上傳至伺服器,供使用者瀏覽下載,是 Web 應用常見功能。ASP.NET 提供 FileUpload 控制項與 HttpPostedFile 類別支援。
enctype="multipart/form-data" 與 method="post",否則無法上傳。File Field(<input type="file">),並加上 runat="server" 變為伺服器控制項。protected void btnUpload_Click(object sender, EventArgs e)
{
DateTime now = DateTime.Now;
string basePath = @"D:\web\FC\pic\";
if (uploadFile1.PostedFile.ContentLength > 0)
{
string fileName = now.DayOfYear.ToString() +
uploadFile1.PostedFile.ContentLength.ToString() + ".jpg";
uploadFile1.PostedFile.SaveAs(basePath + fileName);
lblMessage.Text = "圖片已上傳:" + fileName;
// 寫入 XML 記錄(專案特定需求)
// navigator.Insert(...);
}
}
web.config 設定 maxRequestLength)。適用於企業級專案,支援多種檔案類型、資料庫記錄、隨機檔名生成。
public class FileUpload
{
public enum FileInfo { FILE_SIZE, FILE_POSTNAME, FILE_SYSNAME, FILE_ORGINNAME, FILE_PATH }
private static Random rnd = new Random();
public static string[] UploadFile(HtmlInputFile file, string uploadDir)
{
// 1. 驗證檔案
if (file.PostedFile.ContentLength <= 0) return null;
// 2. 產生唯一檔名:yyyyMMdd_HHmmss_fff_隨機數
string sysName = GetUniqueFileName();
string ext = Path.GetExtension(file.PostedFile.FileName).TrimStart('.');
string origName = Path.GetFileName(file.PostedFile.FileName);
// 3. 儲存實體檔案
string fullPath = Path.Combine(uploadDir, sysName + "." + ext);
file.PostedFile.SaveAs(fullPath);
// 4. 計算檔案大小 (KB)
double sizeKB = Math.Round(file.PostedFile.ContentLength / 1024.0, 2);
// 5. 回傳資訊陣列
return new string[]
{
sizeKB.ToString(), ext, sysName, origName, fullPath
};
}
public static bool ExecuteSql(string sql) { /* ADO.NET 執行 SQL */ }
private static string GetUniqueFileName()
{
DateTime dt = DateTime.Now;
return $"{dt:yyyyMMdd_HHmmss_fff}_{rnd.Next(1000)}";
}
}
string[] info = FileUpload.UploadFile(uploadControl, @"D:\Uploads\");
if (info != null)
{
// info[0] 大小, info[1] 副檔名, info[2] 系統檔名, info[3] 原始檔名, info[4] 完整路徑
FileUpload.ExecuteSql($"INSERT INTO Files VALUES ('{info[2]}', '{info[3]}', ...)");
}
第二種方法結構清晰、擴充性強,建議專案採用元件化設計。