您好如何在我的网站上显示文件以进行下载。我有代码:
Directory.GetFiles("http://example.com/Folder1/Folder2", "*.*")
但它不起作用。我可以这样使用它:
Directory.GetFiles(@"C:\Program Files\Folder1\Folder2", "*.*")
中将此代码用于展示文件
答案 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