ASP.NET Core 中,可以在靜態目錄添加文件,直接訪問就可以下載。但是這種方法可能不安全,也不夠靈活。
我們可以在 Controller 控制器中 添加 一個 Action,通過此Action,即可訪問服務器的任何文件。
Action 格式
public FileResult Down() { return File(xxx,xxx,xxx); }
返回 FileResult 類型,File() 對象
就這么簡單。
File() 對象
問題在於這個 File() 對象,應該怎么寫
筆者舉個例子
在100%無錯的條件下,文件路徑 F:\a.txt
1,創建一個文件流 FileStream
2,獲取文件類型 Content-Type,可以用代碼獲取,也可以用字符串填寫
3,設置文件名
var stream = System.IO.File.OpenRead(“F:\a.txt”); //創建文件流
txt 的文件類型為 text/plain
設置文件名為 b.txt
那么返回的File 代碼如下
return File(stream, "text/plain", “b.txt");
就這么簡單。
獲取文件類型
C#獲取文件類型可以參考
http://www.cnblogs.com/zzsdream/articles/5796763.html
關於文件類型對應得Context-Type
http://tool.oschina.net/commons/
筆者附上小方法
//引入 using System.IO; var contentype = MimeMapping.GetMimeMapping(fileName); //獲取文件類型
動態獲取文件
public FileResult DownSH(string DownM) //要下載文件碼 { var path = _sqlContext.jexusSqls.FirstOrDefault(a => a.DownM == DownM.ToString()).FilePath; //在數據庫查找此文件碼的文件地址 if (!System.IO.File.Exists(path)) return null; var stream = System.IO.File.OpenRead(path); //創建文件流 return File(stream, "application/x-sh", DownM+".sh"); }
編寫方式多種多樣,只需要解決文件流、文件類型、文件名,這三個核心即可。