WebAPI返回文件下载链接

遇到一个需求,即通过接口从SDE中下载数据到临时的MDB中,返回前端一个http下载链接,让前端可以通过该链接获得MDB文件。于是,我们在网站根目录(即与App_Data、web.config同级目录)中创建一个TempData目录,用于保存下载后的临时MDB文件,再通过解析调用请求,获得IP与端口,与该路径拼接成一个下载链接。

代码如下:

        /// 
        /// 测试:返回路径
        /// 
        /// 
        [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"

 

你可能感兴趣的:(WebAPI返回文件下载链接)