首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

ASP.NET FileUpload 控件路徑處理:Path.GetFileName 替代手動 Substring,SaveAs 與虛擬路徑映射詳解

     編輯:程式設計綜合問答

原代碼問題

// 手動尋找最後一個 \ 截取文件名,跨平台不可靠
int a = filePath.LastIndexOf("\\");
string fileName = filePath.Substring(a + 1);

缺陷:Windows 用 `\`,Linux/Mac 用 `/`,手動解析不具可移植性。

標準庫最佳實踐

using System.IO;

string fileName = Path.GetFileName(fileUpload.PostedFile.FileName); // 僅文件名
string ext = Path.GetExtension(fileName); // 副檔名
string dir = Path.GetDirectoryName(filePath); // 目錄部分

SaveAs 完整流程

if (fileUpload.HasFile) {
    string fileName = Path.GetFileName(fileUpload.FileName);
    // 1. 目標物理路徑 = 虛擬路徑映射 + 文件名
    string virtualPath = "~/Uploads/"; // 虛擬目錄
    string physicalPath = Server.MapPath(virtualPath); // 物理路徑
    if (!Directory.Exists(physicalPath)) Directory.CreateDirectory(physicalPath);
    string fullPath = Path.Combine(physicalPath, fileName);
    // 2. 保存
    fileUpload.SaveAs(fullPath);
    // 3. 數據庫存虛擬路徑供前端訪問
    string dbPath = VirtualPathUtility.Combine(virtualPath, fileName);
}

關鍵概念釐清

術語含義示例
虛擬路徑相對 Web 應用根目錄的路徑~/Uploads/abc.jpg
物理路徑服務器磁盤絕對路徑C:\inetpub\wwwroot\Uploads\abc.jpg
Server.MapPath虛擬 → 物理Server.MapPath("~/Uploads")
VirtualPathUtility.Combine虛擬路徑安全拼接Combine("~/Uploads/", "a.jpg")

安全補充

  • 驗證副檔名/MIME 類型,防惡意腳本上傳。
  • 文件名加 GUID/時間戳避免覆蓋:`Guid.NewGuid() + ext`。
  • 設置上傳目錄執行權限為「無腳本執行」(IIS 處理程序映射移除 .aspx/.php 等)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved