在我的网站上显示文件

时间:2012-07-27 18:42:04

标签: c# file directory show getfiles

您好如何在我的网站上显示文件以进行下载。我有代码:

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

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

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

如何在http://example.com/Folder1/Folder2

中将此代码用于展示文件

4 个答案:

答案 0 :(得分: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);
    }
}

正如您在导航网址中看到的那样,我们将使用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>

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

祝你好运!

答案 1 :(得分:1)

在一个体面的网站上没有办法做到这一点,你可以下载一个文件,如果你知道它的URL,但是如果正确设置了网站,就无法获取所有文件的目录或获取目录结构。< / p>

要从网络服务器下载文件,您必须使用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

答案 2 :(得分:0)

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

您将URL传递给网站,这就是为什么它没有返回任何内容 - 它期待本地路径。

答案 3 :(得分: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