常見需求:用戶上傳圖片,伺服器依用戶 ID 自動建立專屬資料夾存放,並以時間+隨機數重命名避免衝突。
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="btnUpload" Text="上傳並建立資料夾" OnClick="btnUpload_Click" runat="server" />
protected void btnUpload_Click(object sender, EventArgs e)
{
if (!FileUpload1.HasFile) return;
// 1. 取得副檔名
string ext = Path.GetExtension(FileUpload1.FileName); // 含 .
// 2. 產生唯一檔名:yyyyMMddHHmmss + 兩位隨機數
string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + new Random().Next(10, 99) + ext;
// 3. 用戶專屬資料夾(實務上用 UserID)
string userDir = "User_" + Session["UserID"]; // 例:User_1001
string saveRoot = Server.MapPath("~/UploadFiles");
string userPath = Path.Combine(saveRoot, userDir, "ProductImages");
// 4. 確保資料夾存在
if (!Directory.Exists(userPath)) Directory.CreateDirectory(userPath);
// 5. 儲存檔案
string fullPath = Path.Combine(userPath, fileName);
FileUpload1.SaveAs(fullPath);
// 6. 回傳虛擬路徑存入資料庫
string virtualPath = $"/UploadFiles/{userDir}/ProductImages/{fileName}";
// db.SaveImagePath(virtualPath);
Response.Write("上傳成功:" + virtualPath);
}
FileUpload.HasFile 必須先判斷,否則 SaveAs 會拋出例外。Path.Combine 自動處理路徑分隔符,跨平台更安全。