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

时间:2011-06-20 11:16:17

标签: c# .net asp.net file-browser

我正在使用一个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/>");
        }
    }
}

3 个答案:

答案 0 :(得分:1)

你尝试过这样的事吗?

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

答案 1 :(得分:1)

问题是,在子文件夹中渲染文件的路径时,您使用的路径如“Upload / filename”;这是不正确的。

实际上,您应该尝试从当前的di变量中获取目录名称。也就是说,如果您当前正在浏览“上传”文件夹中的“内部”文件夹,则您的路径将类似于“上传/内部/文件名”。

这是您需要进行更改的地方:

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

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

  1. 获取路径
  2. 在di路径中的“\ Upload”之后获取子字符串
  3. 将上述子字符串拆分为“\”;这将为您提供任何子目录。
  4. 使用上述子目录创建文件的新路径。
  5. 我希望这会有所帮助。

答案 2 :(得分:1)

这更具可读性:

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()