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

ASP.NET 通用文件上傳組件:支援分類存儲、重命名、類型驗證

     編輯:ASP.NET 基礎

特性速覽

  • 鏈式配置 API(SetFileDirectory、SetFileType 等)。
  • 兩種子目錄策略:按日期(yyyy-MM/dd)或按業務編號。
  • 同名檔案可選重命名或覆蓋。
  • 檔案類型白名單(支援 * 全許可)、大小限制。
  • 返回結構化結果(Error、WebFilePath、FileName 等)。

調用示例

var uf = new UploadFile()
    .SetFileDirectory(Server.MapPath("/file/temp3/"))
    .SetFileType(".jpg,.png,.pdf")
    .SetMaxSizeM(5)
    .SetIsRenameSameFile(true);

// 按日期存儲
var msg1 = uf.Save(Request.Files["Fileupload1"]);

// 按業務編號存儲
var msg2 = uf.Save(Request.Files["Fileupload1"], "ORDER_20240101");

if (!msg1.Error) { /* 成功:msg1.WebFilePath */ }

核心實現亮點

1. 靈活的存儲路徑解析

private string GetDirectory(ref string webDir)
{
    var childDir = PathSaveType == PathSaveType.dateTimeNow
        ? DateTime.Now.ToString("yyyy-MM/dd")
        : _Number; // 業務編號
    webDir = $"{FileDirectory.TrimEnd('/')}/{childDir}/";
    var physDir = HttpContext.Current.Server.MapPath(webDir);
    if (!Directory.Exists(physDir)) Directory.CreateDirectory(physDir);
    return physDir;
}

2. 安全的類型驗證

private void CheckingType(ResponseMessage msg, string fileName)
{
    if (FileType != "*")
    {
        var ext = Path.GetExtension(fileName).ToLowerInvariant();
        if (!FileType.Split(',').Contains(ext))
            TryError(msg, "文件類型非法!");
    }
}

3. 結構化返回模型

public class ResponseMessage
{
    public bool Error { get; set; }
    public string Message { get; set; }
    public string FilePath { get; set; }      // 物理路徑
    public string WebFilePath { get; set; }   // 相對 Web 路徑
    public string FileName { get; set; }
}

使用建議

  • 生產環境請將上傳目錄設置為不可執行權限,防止腳本攻擊。
  • 大文件建議改用分片上傳或直傳雲存儲(OSS/S3),避免阻塞 Web 線程。
  • 配合前端 Plupload/WebUploader 實現進度條、斷點續傳。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved