Mostrar archivos en mi sitio web

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 ?

preguntado el 27 de julio de 12 a las 19:07

Deberías echarle un vistazo a esto: stackoverflow.com/questions/124492/… -

4 Respuestas

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

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 FtpWebRequest , 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

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

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

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.