此為範例,依照需求去調整程式碼,因為檔案是放在非網站目錄下 (放網站目錄會有資安疑慮) 前端 cshtml ``` <a class="fw-bold" href="#" onclick="FileDownLoad(@fileInfo.Sno)"> 另開視窗或下載(PDF) </a> ``` 前端 Js ``` var UrlFileDownLoad = '@Url.Action("FileDownLoad","ControllerName")'; function PlanFileDownLoad(fileSno) { window.open(`${UrlFileDownLoad}?fileSno=${fileSno}`); } ``` 後端 C# (fileData為Service回傳後自訂類別) ``` /// <summary> /// 下載檔案 /// </summary> /// <param name="fileSno"></param> /// <returns></returns> public ActionResult FileDownLoad(string fileSno) { var fileData = IService.GetFile(int.Parse(fileSno)); //找檔案 try { FileStream stream = new FileStream(fileData.FileName, FileMode.Open, FileAccess.Read, FileShare.Read); return File(stream, "application/octet-stream", "檔案.pdf"); //MME 格式 可上網查 此為通用設定 } catch (System.Exception) { return Content("<script>alert('查無此檔案');window.close()</script>"); } } ``` 後端web.config需做登入驗證,否則知道連結的使用者都能隨意下載檔案 (該設定限制 .Net Framework使用) ``` <authentication mode="Forms"> <!--允許跨越Cookie登入--> <!--//defaultUrl:登入後到哪一頁,loginUrl:使用者未登入的話,要導至哪一頁--> <forms name=".TestAuth" requireSSL="true" loginUrl="~/Home" path="/" slidingExpiration="false" cookieless="UseCookies" protection="All" timeout="1" /> </authentication> ```