[.net MVC] 檔案下載 or 預覽

原本我們的檔案 是直接給對方看檔案路徑

所以只需要在

typeScript 內加上

window.location = filePath;  

這樣的方式就是,會另開新的網頁然後URL會直接Show出檔案路徑

並顯示該檔案的檔案內容

但今天需要改成,前端不能再顯示,並且點下後直接下載檔案

其實就是讓前端<a> 的 href 動態加進去,然後再去後端處理

filePath = `${Url.GetRootPath()}/File/DownloadFile?year=111&prjId=testID&fileName=test`;
<a id="test" href="#" target="_blank" target="main">AttDesc</a>

            $(`#test`).on("click", function () {                
                //window.location = filePath;  //如果要預覽
                $(`#test`).attr("href", filePath); // 檔案下載 走後端 File Controller DownloadFile Action     
            })

後端程式

        public ActionResult DownloadFile(string year,string prjId,string fileName)
        {                        
            string path = Server.MapPath($"~/{year}/{prjId}/{fileName}");
            //找檔案                     
            try
            {
                FileStream stream = new FileStream(path, FileMode.Open,FileAccess.Read,FileShare.Read);
                return File(stream, "application/octet-stream", fileName); //MME 格式 可上網查 此為通用設定
            }
            catch (System.Exception)
            {
                return Content("<script>alert('查無此檔案');window.close()</script>");
            }
        }

MME 格式

 

另外補充 在Chorme 裡面有些點下後會直接下載

有些點下後 會跳出要你選擇儲存位置

那並不是程式可以控制的,那是瀏覽器本身(可能Chorme帳號設定)設定