WebAPI返回檔案下載連結
阿新 • • 發佈:2018-12-04
遇到一個需求,即通過介面從SDE中下載資料到臨時的MDB中,返回前端一個http下載連結,讓前端可以通過該連結獲得MDB檔案。於是,我們在網站根目錄(即與App_Data、web.config同級目錄)中建立一個TempData目錄,用於儲存下載後的臨時MDB檔案,再通過解析呼叫請求,獲得IP與埠,與該路徑拼接成一個下載連結。
程式碼如下:
/// <summary> /// 測試:返回路徑 /// </summary> /// <returns></returns> [HttpGet] [ResponseType(typeof(string))] public IHttpActionResult Parse() { var sPath = @"E:\Code\MyTest\WebApplication2\WebApplication2\TempData\abc.mdb"; //var sPath = @"~\TempData\abc.doc"; if (sPath.IndexOf("~") == 0) sPath = HostingEnvironment.MapPath(sPath); //轉為絕對路徑 //取得當前網站的絕對路徑 var sRootePath = HostingEnvironment.MapPath(HostingEnvironment.ApplicationVirtualPath); //取得檔案相對於網站的路徑(如:TempData/abc.mdb) var sRelativeUri = new Uri(sRootePath, UriKind.Absolute).MakeRelativeUri(new Uri(sPath, UriKind.Absolute)).ToString(); // 先判斷是否與原路徑相同,如相同則表示二者可能不在同一個磁碟上 var sResult = (0 == string.Compare(Path.GetFullPath(sRelativeUri), Path.GetFullPath(sPath), StringComparison.OrdinalIgnoreCase)) ? null : $"http://{HttpContext.Current.Request.Url.Authority}/{sRelativeUri}"; //構造返回路徑 return Json(sResult); }
呼叫時,返回的結果為:
"http://localhost:6730/TempData/abc.mdb"