我正在使用一个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/>");
}
}
}
答案 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。执行以下操作:
我希望这会有所帮助。
答案 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);
}