当前位置:  开发笔记 > 后端 > 正文

如何将文件路径转换为ASP.NET中的URL

如何解决《如何将文件路径转换为ASP.NET中的URL》经验,为你挑选了4个好方法。

基本上我有一些代码来检查特定的目录,看看是否有图像,如果是,我想将图像的URL分配给ImageControl.

if (System.IO.Directory.Exists(photosLocation))
{
    string[] files = System.IO.Directory.GetFiles(photosLocation, "*.jpg");
    if (files.Length > 0)
    {
        // TODO: return the url of the first file found;
    }
}

Dementic.. 16

这是我用的:

private string MapURL(string path)
{
    string appPath = Server.MapPath("/").ToLower();
    return string.Format("/{0}", path.ToLower().Replace(appPath, "").Replace(@"\", "/"));
 }


Fredrik Kals.. 13

据我所知,没有办法做你想做的事情; 至少不是直接的.我将它存储photosLocation为相对于应用程序的路径; 例如:"~/Images/".这样,您可以使用MapPath获取物理位置,并ResolveUrl获取URL(有一些帮助System.IO.Path):

string photosLocationPath = HttpContext.Current.Server.MapPath(photosLocation);
if (Directory.Exists(photosLocationPath))
{
    string[] files = Directory.GetFiles(photosLocationPath, "*.jpg");
    if (files.Length > 0)
    {
        string filenameRelative = photosLocation +  Path.GetFilename(files[0])   
        return Page.ResolveUrl(filenameRelative);
    }
}

@Fredrik正如Jared指出的那样,HttpRequest对象没有这个方法.它可以在Page对象或Web控件对象中找到.你可以编辑你的答案来反映这个吗? (12认同)

我在任何.Net版本的文档中都找不到HttpRequest的ResolveUrl成员.你在使用ASP.Net MVC吗? (8认同)

`ResolveUrl`不是`System.Web.HttpRequest`的成员 (7认同)


Ross Presser.. 11

所有这些答案的问题在于它们不考虑虚拟目录.

考虑:

Site named "tempuri.com/" rooted at c:\domains\site
virtual directory "~/files" at c:\data\files
virtual directory "~/files/vip" at c:\data\VIPcust\files

所以:

Server.MapPath("~/files/vip/readme.txt") 
  = "c:\data\VIPcust\files\readme.txt"

但是没有办法做到这一点:

MagicResolve("c:\data\VIPcust\files\readme.txt") 
   = "http://tempuri.com/files/vip/readme.txt"

因为无法获得完整的虚拟目录列表.



1> Dementic..:

这是我用的:

private string MapURL(string path)
{
    string appPath = Server.MapPath("/").ToLower();
    return string.Format("/{0}", path.ToLower().Replace(appPath, "").Replace(@"\", "/"));
 }



2> Fredrik Kals..:

据我所知,没有办法做你想做的事情; 至少不是直接的.我将它存储photosLocation为相对于应用程序的路径; 例如:"~/Images/".这样,您可以使用MapPath获取物理位置,并ResolveUrl获取URL(有一些帮助System.IO.Path):

string photosLocationPath = HttpContext.Current.Server.MapPath(photosLocation);
if (Directory.Exists(photosLocationPath))
{
    string[] files = Directory.GetFiles(photosLocationPath, "*.jpg");
    if (files.Length > 0)
    {
        string filenameRelative = photosLocation +  Path.GetFilename(files[0])   
        return Page.ResolveUrl(filenameRelative);
    }
}


@Fredrik正如Jared指出的那样,HttpRequest对象没有这个方法.它可以在Page对象或Web控件对象中找到.你可以编辑你的答案来反映这个吗?
我在任何.Net版本的文档中都找不到HttpRequest的ResolveUrl成员.你在使用ASP.Net MVC吗?
`ResolveUrl`不是`System.Web.HttpRequest`的成员

3> Ross Presser..:

所有这些答案的问题在于它们不考虑虚拟目录.

考虑:

Site named "tempuri.com/" rooted at c:\domains\site
virtual directory "~/files" at c:\data\files
virtual directory "~/files/vip" at c:\data\VIPcust\files

所以:

Server.MapPath("~/files/vip/readme.txt") 
  = "c:\data\VIPcust\files\readme.txt"

但是没有办法做到这一点:

MagicResolve("c:\data\VIPcust\files\readme.txt") 
   = "http://tempuri.com/files/vip/readme.txt"

因为无法获得完整的虚拟目录列表.



4> Andy Rose..:

我已经接受了Fredriks的答案,因为它似乎以最少的努力解决了问题,但是Request对象似乎并没有使用ResolveUrl方法.这可以通过Page对象或Image控件对象访问:

myImage.ImageUrl = Page.ResolveUrl(photoURL);
myImage.ImageUrl = myImage.ResolveUrl(photoURL);

如果你像我一样使用静态类,另一种方法是使用VirtualPathUtility:

myImage.ImageUrl = VirtualPathUtility.ToAbsolute(photoURL);

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有