Mostrar archivos en mi sitio web
Frecuentes
Visto 1,693 equipos
0
Hola como puedo mostrar archivos en mi web para descargarlo. Tengo código:
Directory.GetFiles("http://example.com/Folder1/Folder2", "*.*")
Pero no está funcionando. Puedo usarlo así:
Directory.GetFiles(@"C:\Program Files\Folder1\Folder2", "*.*")
¿Cómo puedo usar este código para mostrar archivos en http://example.com/Folder1/Folder2 ?
4 Respuestas
2
tu pregunta es un poco vaga, pero creo que tengo lo que estás buscando. De todos modos, voy a suponer que está usando ASP.NET, el primer paso es crear algo para mostrar sus archivos. He usado un repetidor con solo un hipervínculo así:
<asp:Repeater ID="rpt" runat="server" OnItemDataBound="rpt_ItemDataBound">
<ItemTemplate>
<asp:HyperLink ID="hyp" runat="server" />
</ItemTemplate>
</asp:Repeater>
Después de esto, deberá llenar el repetidor. Puede hacerlo en la carga de la página de esta manera:
if (!Page.IsPostBack)
{
string[] files = Directory.GetFiles(@"C:\testfolder");
rpt.DataSource = files;
rpt.DataBind();
}
El siguiente paso que puede hacer es completar el método ItemDataBound así:
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);
}
}
Como puede ver en la URL de navegación, vamos a utilizar un HttpHandler. Cuando crea un nuevo archivo de controlador (.ashx). En su método ProcessRequest, necesitará algo como esto, para que el archivo esté disponible para descargar:
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();
}
No olvide registrar su controlador en web.config en el nodo system.web así:
<httpHandlers>
<add verb="*" path="~/Handlers/FileHandler.ashx?file={0}" type="StackOverflow.Questions.Handlers.FileHandler, StackOverflow.Questions"/>
</httpHandlers>
Tenga en cuenta que no se deben pasar rutas a través de la cadena de consulta como lo hice yo, pero no sé cómo funciona su aplicación, así que busque algo que se adapte a sus necesidades.
¡Buena suerte!
Respondido 29 Jul 12, 01:07
1
No hay forma de hacer eso en un sitio web decente, puede descargar un archivo si sabe su URL, pero no hay forma de obtener todos los archivos en el directorio u obtener la estructura del directorio si el sitio web está configurado correctamente.
Para descargar el archivo del servidor web, debe usar WebClient, algo como esto :
WebClient wc = new WebClient();
wc.DownloadFile(" http://example.com/Folder1/Folder2/File.txt", "C:\\temp\\File.txt");
Para descargar un archivo del servidor FTP, utilice Solicitud FtpWeb , aquí está el ejemplo para listar archivos de directorio:
http://www.coding.defenselife.com/index.php/articles/20-ftpwebrequest-sample-c
Respondido 27 Jul 12, 21:07
0
De los documentos: * Devuelve los nombres de los archivos (incluidas sus rutas) en el especificado directorio.
Le está pasando una URL a un sitio web, por eso no devuelve nada, está esperando una ruta local.
Respondido 27 Jul 12, 19:07
0
Gracias a todos por sus respuestas. Descargué el cliente ftp para C#. Y usé ese código:
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();
Puede descargar el cliente ftp desde aquí: http://www.limilabs.com/ftp
Respondido 29 Jul 12, 20:07
Deberías echarle un vistazo a esto: stackoverflow.com/questions/124492/… - Charlie