版权声明:本文为博主原创文章,不需博主允许即可随意转载。 https://blog.csdn.net/a_dev/article/details/82315854
遇到一个需求,即通过接口从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"