1. 程式人生 > >.NET MVC 通過許可權控制檔案的下載

.NET MVC 通過許可權控制檔案的下載

禁止使用者通過URL直接下載檔案

在web.config中配置通過後綴名拒絕訪問(需要IIS伺服器已安裝請求篩選模組)

<security>
  <requestFiltering>
    <fileExtensions>
      <add fileExtension=".zip" allowed="false" />
      <add fileExtension=".ppt" allowed="false" />
      <add fileExtension=".pptx" allowed="false" />
<add fileExtension=".doc" allowed="false" /> <add fileExtension=".docx" allowed="false" /> <add fileExtension=".xls" allowed="false" /> <add fileExtension=".xlsx" allowed="false" /> </fileExtensions> </requestFiltering> </security>

通過專門的方法讀取並下載檔案

在使用者生成檔案時,將uid作為檔名的第一個引數,當用戶通過DownloadDoc方法下載檔案時通過當前用於的uid和檔名的uid進行比對,然後下載。也可以將不同使用者的檔案放在不同的目錄中,通過目錄名來控制下載請求。

public ActionResult DownloadDoc()
{
    string fileName = Convert.ToString(Request["name"]);
    int uid = RequestHandler.SafeInt(Convert.ToString(System.Web.HttpContext.Current.Session["id"
])); string[] arr = fileName.Split(new Char[] { '-'}); if(arr.Length < 1) { return ErrorResponse("檔案格式錯誤,下載失敗"); } if(uid != RequestHandler.SafeInt(Convert.ToString(arr[0]))) { return ErrorResponse("沒有許可權下載此檔案"); } string path = GlobalConst.rootPath + GlobalConst.DocFile + "User" + "/" + fileName; if (System.IO.File.Exists(path) == false) { return ErrorResponse("檔案不存在"); } return File(new FileStream(path, FileMode.Open), "application/octet-stream", fileName); }