0

嗨,我如何在我的网站上显示文件以下载它。我有代码:

Directory.GetFiles("http://example.com/Folder1/Folder2", "*.*")

但它不起作用。我可以这样使用它:

Directory.GetFiles(@"C:\Program Files\Folder1\Folder2", "*.*")

如何将此代码用于http://example.com/Folder1/Folder2中的显示文件?

4

4 回答 4

2

你的问题有点含糊,但我想我得到了你要找的东西。无论如何,我假设您使用的是 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>

请记住,不应该像我一样通过查询字符串传递路径,但我不知道您的应用程序是如何工作的,所以找到适合您的东西。

祝你好运!

于 2012-07-29T00:42:51.893 回答
1

在一个像样的网站上没有办法做到这一点,如果你知道它的 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

于 2012-07-27T18:49:00.990 回答
0

来自文档:*返回指定目录中的文件名(包括它们的路径) 。

您正在将一个 URL 传递给一个网站,这就是它不返回任何内容的原因——它需要一个本地路径。

于 2012-07-27T18:48:59.840 回答
0

感谢大家的回答。我下载了 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

于 2012-07-29T19:53:58.380 回答