WebAPI返回文件下载链接

遇到一个需求,即通过接口从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"

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值