ASP.NET文件浏览器路径转换

本文关键字:路径 转换 浏览器 文件 NET ASP | 更新日期: 2023-09-27 17:59:30

我正在开发一个asp.net文件浏览器,该浏览器递归地浏览文件夹并列出其文件和子文件夹。然而,我也想让文件可以下载/查看,但它在那里,我似乎有问题。我无法正确翻译地址。我有以下配置和代码。

编辑

问题是创建的链接

Response.Write(space + "<a href=" + "Upload/" + d.Name + ">" + d.FullName + "</a><br/>");

请不要正确链接到该文件。还有一个额外的问题需要解决:有些文件名包含空格。

Web.config

<appSettings>
  <add key="UploadDirectory" value="~/Upload/"/>
</appSettings>

FileBrowser.aspx.cs

public partial class FileBrowser : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {        
        DirectoryInfo di = new DirectoryInfo(Request.MapPath(System.Configuration.ConfigurationManager.AppSettings["UploadDirectory"]));
        if (Directory.Exists(di.ToString()))
            printDir("", di.ToString());
    }
    protected void printDir(string space, string dir)
    {
        DirectoryInfo di = new DirectoryInfo(dir);
        foreach (DirectoryInfo d in di.GetDirectories())
        {
            Response.Write(space + "<a href=" + d.ToString() + ">" + d.ToString() + "</a><br/>");
            printDir(space + "&nbsp;&nbsp;&nbsp;&nbsp;", dir + "''" + d.ToString());
        }
        foreach (FileInfo d in di.GetFiles())
        {
            Response.Write(space + "<a href=" + "Upload/" + d.Name + ">" + d.FullName + "</a><br/>");
        }
    }
}

ASP.NET文件浏览器路径转换

问题是,当呈现子文件夹中文件的路径时,您使用的路径类似于"Upload/filename";这是不对的。

事实上,您应该尝试从当前di变量中获取目录名。也就是说,如果您当前正在浏览"Upload"文件夹中的"Inner"文件夹,您的路径将类似于"Upload/Inter/filename"。

这就是你需要做出改变的地方:

  Response.Write(space + "<a href=" + "Upload/" + d.Name + ">" + d.FullName + "</a><br/>");

在上面的代码行中,您需要根据di变量中的路径动态创建href URL。执行以下操作:

  1. 获取di路径
  2. 获取di路径中"''Upload"后的子字符串
  3. 用"''"分隔上面的子字符串;这会给你任何分区
  4. 使用上面的子目录创建文件的新路径

我希望这能有所帮助。

你试过这样的东西吗?

foreach (FileInfo d in di.GetFiles())
{
    Response.Write(space + "<a href=" + Server.MapPath("~/Upload/") + d.Name + ">" + d.FullName + "</a><br/>");
}

这更可读:

foreach (FileInfo d in di.GetFiles("*", SearchOption.AllDirectories)) // includes subfolders
{
    Response.Write(String.Format("{0}<a href='"{1}'">{2}</a>", space, Server.MapPath("~/Upload/") + d.Name, d.FullName);
}

也可以尝试DirectoryInfo.EnumerateFile()