.NET MVC 通過許可權控制檔案的下載
阿新 • • 發佈:2019-01-28
禁止使用者通過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);
}