嗨,我如何在我的网站上显示文件以下载它。我有代码:
Directory.GetFiles("http://example.com/Folder1/Folder2", "*.*")
但它不起作用。我可以这样使用它:
Directory.GetFiles(@"C:\Program Files\Folder1\Folder2", "*.*")
如何将此代码用于http://example.com/Folder1/Folder2中的显示文件?
你的问题有点含糊,但我想我得到了你要找的东西。无论如何,我假设您使用的是 ASP.NET,第一步是创建一些东西来显示您的文件。我使用了一个中继器,其中只有一个超链接,如下所示:
<asp:Repeater ID="rpt" runat="server" OnItemDataBound="rpt_ItemDataBound">
<ItemTemplate>
<asp:HyperLink ID="hyp" runat="server" />
</ItemTemplate>
</asp:Repeater>
在此之后,您需要填充中继器。您可以像这样在页面加载中执行此操作:
if (!Page.IsPostBack)
{
string[] files = Directory.GetFiles(@"C:\testfolder");
rpt.DataSource = files;
rpt.DataBind();
}
下一步您可以完成 ItemDataBound 方法,如下所示:
protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
string file = e.Item.DataItem as string;
HyperLink hyp = e.Item.FindControl("hyp") as HyperLink;
hyp.Text = file;
hyp.NavigateUrl = string.Format("~/Handlers/FileHandler.ashx?file={0}", file);
}
}
正如您在导航 url 中看到的,我们将使用 HttpHandler。当您创建一个新的处理程序文件 (.ashx)。在它的 ProcessRequest 方法中,您将需要这样的东西,因此该文件可供下载:
public void ProcessRequest(HttpContext context)
{
context.Response.Clear();
context.Response.ContentType = "application/octet-stream";
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + context.Request.QueryString["file"]);
context.Response.WriteFile(context.Request.QueryString["file"]);
context.Response.End();
}
不要忘记在 system.web 节点的 web.config 中注册您的处理程序,如下所示:
<httpHandlers>
<add verb="*" path="~/Handlers/FileHandler.ashx?file={0}" type="StackOverflow.Questions.Handlers.FileHandler, StackOverflow.Questions"/>
</httpHandlers>
请记住,不应该像我一样通过查询字符串传递路径,但我不知道您的应用程序是如何工作的,所以找到适合您的东西。
祝你好运!
在一个像样的网站上没有办法做到这一点,如果你知道它的 URL,你可以下载一个文件,但如果网站设置正确,则无法获取目录中的所有文件或获取目录结构。
要从 Web 服务器下载文件,您必须使用WebClient,如下所示:
WebClient wc = new WebClient();
wc.DownloadFile(" http://example.com/Folder1/Folder2/File.txt", "C:\\temp\\File.txt");
要从 FTP 服务器下载文件,请使用FtpWebRequest,这是列出目录文件的示例:
http://www.coding.defenselife.com/index.php/articles/20-ftpwebrequest-sample-c
来自文档:*返回指定目录中的文件名(包括它们的路径) 。
您正在将一个 URL 传递给一个网站,这就是它不返回任何内容的原因——它需要一个本地路径。
感谢大家的回答。我下载了 C# 的 ftp 客户端。我使用了该代码:
ftp.Connect("ftp.domain.com");
ftp.Login("user", "pw");
// If files in : domains/httpdocs/Install/Program
ftp.ChangeFolder("domains");
ftp.ChangeFolder("httpdocs");
ftp.ChangeFolder("Install");
ftp.DownloadFiles("Program",
"C:/Program Files/Install/", new RemoteSearchOptions("*.*", true));
ftp.Close();
您可以从这里下载 ftp 客户端:http ://www.limilabs.com/ftp