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

まともなWebサイトでそれを行う方法はありません。URLがわかっている場合はファイルをダウンロードできますが、Webサイトが適切に設定されている場合は、すべてのファイルを直接取得したり、ディレクトリ構造を取得したりする方法はありません。

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

ドキュメントから:*指定されたディレクトリ内のファイルの名前(パスを含む)を返します。

Webサイトへの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 に答える