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 + " ", dir + "''" + d.ToString());
}
foreach (FileInfo d in di.GetFiles())
{
Response.Write(space + "<a href=" + "Upload/" + d.Name + ">" + d.FullName + "</a><br/>");
}
}
}
问题是,当呈现子文件夹中文件的路径时,您使用的路径类似于"Upload/filename";这是不对的。
事实上,您应该尝试从当前di变量中获取目录名。也就是说,如果您当前正在浏览"Upload"文件夹中的"Inner"文件夹,您的路径将类似于"Upload/Inter/filename"。
这就是你需要做出改变的地方:
Response.Write(space + "<a href=" + "Upload/" + d.Name + ">" + d.FullName + "</a><br/>");
在上面的代码行中,您需要根据di变量中的路径动态创建href URL。执行以下操作:
- 获取di路径
- 获取di路径中"''Upload"后的子字符串
- 用"''"分隔上面的子字符串;这会给你任何分区
- 使用上面的子目录创建文件的新路径
我希望这能有所帮助。
你试过这样的东西吗?
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()