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

ASP.NET 下載文件自定義文件名:Content-Disposition header 設置

     編輯:程式設計綜合問答

需求:用戶請求 /sqlExcel/goods.xls,下載彈窗顯示「主表.xls」。

核心方案:動態輸出流 + 設置 Header

public void DownloadExcel() {
    string filePath = Server.MapPath("~/sqlExcel/goods.xls");
    if (!System.IO.File.Exists(filePath)) {
        Response.StatusCode = 404; return;
    }

    Response.Clear();
    Response.ContentType = "application/vnd.ms-excel";
    // 關鍵:指定下載文件名,UTF-8 編碼防中文亂碼
    string fileName = "主表.xls";
    string encodedName = System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);
    Response.AddHeader("Content-Disposition", $"attachment; filename=\"{encodedName}\"; filename*=UTF-8''{encodedName}");

    Response.TransmitFile(filePath); // 高效發送文件,不佔用內存
    Response.End();
}

關鍵點解析

ASP.NET Core 寫法

public IActionResult Download() {
    var path = Path.Combine(_env.ContentRootPath, "sqlExcel", "goods.xls");
    var bytes = System.IO.File.ReadAllBytes(path); // 或 FileStream
    return File(bytes, "application/vnd.ms-excel", "主表.xls");
    // File() 內部自動設置 Content-Disposition 與編碼
}

避坑提醒

  • 不要用 Response.WriteFile(舊版本大文件會 OOM),用 TransmitFile 或 FileStream 分塊輸出。
  • 中文文件名**必須雙重編碼**(filename + filename*)全兼容。
  • 若文件需動態生成(如 EPPlus/NPOI),直接寫入 Response.OutputStream 並設置相同 Header。

掌握 Content-Disposition 雙編碼模板,文件下載重命名場景全覆蓋。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
Header作用
Content-Type告知瀏覽器文件類型,觸發下載而非預覽
Content-Disposition: attachment強制下載彈窗,而非瀏覽器內打開
filename="..."舊瀏覽器兼容,需 UrlEncode
filename*=UTF-8''...RFC 5987 標準,現代瀏覽器正確顯示中文