Desenvolvimento - ASP. NET

Listando arquivos de um diretório para download em ASP.NET

Com as classes do .Net é possível fazer um belo e simples sistema para listar os arquivos de um diretório. Nesse artigo irei mostrar como navegar por diretórios e possibilitar o download de arquivos, escondendo a posição real do arquivo.

por Cassio R. Eskelsen



Faça o download dos fontes aqui

ftp.jpg

Como você pode ver, o código lista o conteúdo de um diretório e seus subdiretórios. Além disso ele lista o tamanho de cada arquivo e o tamanho dos subdiretórios. Através do ícone você pode descarregar o arquivo. O projeto foi feito no Sharp Develop.Existem alguns arquivos especiais, como o leiame, que na realidade é leiame.inst e link_para_o_artigo que está arquivo como link_para_o_artigo.link. Ao clicar em leiame a rotina vê que é um arquivo .inst e abre outra janela, exibindo o conteúdo desse arquivo, que pode ser texto puro ou html. O arquivo link_para_o_artigo.link é um arquivo texto com uma única linha que pode ser um link para qualquer lugar. Ao clicar nesse arquivo, o sistema abre o arquivo, lê seu conteúdo e redireciona para o link indicado.O fonte que deu base para essa rotina está em http://www.aspheute.com/artikel/20021105.htm (irá abrir em outra janela).Como você pode perceber, está totalmente em alemão! As mudanças que eu fiz foram:a) Desativei por enquanto as opções de upload, deleção e edição de arquivosb) Traduzi os nomes de variáveis para o portuguêsc) Traduzi os comentários para o Inglês (via google). d) Adicionei as rotinas que comentei acima: mostrar um arquivo .inst (útil quando você precisa deixar instruções de como instalar); possibilitar um link (arquivo .link) e passar para o browser a informação correta do tipo de arquivo ; pequenas mudanças visuais.Para utilizar não há muito mistério: coloque os aspx em alguma pasta qualquer do seu site ou intranet e a dll ftp.dll no diretório /bin do site.Alternativamente você não precisa colocar a dll no site. Você pode colocar os fontes deixando o interpretador (IIS ou XSP) compilarem dinamicamente. Para isso você precisa alterar os *.aspx na primeira linha substituindo o codebehind por src. Por exemplo, o arquivos.aspx normalmente é:<%@ Page language="c#" Codebehind="arquivos.aspx.cs" AutoEventWireup="false" Inherits="ftp.Main" culture="pt-BR" %> e passaria a ser:<%@ Page language="c#" src="arquivos.aspx.cs" AutoEventWireup="false" Inherits="ftp.Main" culture="pt-BR" %>
Se você quiser recompilar os binários, poderá usar o combine (para Sharp Develop ou Monovelop) ou ainda, compilar na mão: mcs -r:System.Web -r:System.Data -r:System.Drawing -t:library -out:bin/ftp.dll mostrainst.aspx.cs arquivos.aspx.cs
No web.config (habitua-se a escrever web.config em minúsculas para que não haja problemas no Linux) do site você precisa adicionar duas chaves na seção <appSettings>:<add key="caminhaplicacao" value = "/ftp/"/>
<add key="diretorioFTP" value = "//caminho do diretorio que você quer listar//"/>Na primeira chave você indica o caminho de onde estão os arquivos que você puxou. Por exemplo, se você colocou em www.seusite.com.br/ftp, aqui você indicará "/ftp"Na segunda chave você indicará o caminho completo (diretório) a partir do qual você quer que o usuário "navegue". Esse diretório pode estar em qualquer parte do servidor, mas obviamende deve estar acessível para o Servidor. Caso o seu provedor não tenha informado qual é o caminho completo da sua aplicação, você pode usar o dir.aspx que está junto com os fontes. Ele vai mostrar em qual diretório ele está, e com isso você pode se orientar. Apenas chame http://www.seusite.com.br/ftp/dir.aspx Exemplos:windows: <add key="diretorioFTP" value = "//c://inetpub//www//root//seusite//arquivos\"/>linux: <add key="diretorioFTP" value = "/srv/www/htdocs/seusite/arquivos"/>Agora é só navegar! Aponte seu browser para http://www.seusite.com/ftp/arquivos.aspx e veja os arquivos sendo listados!!!Os arquivos-chave são os arquivos.aspx e arquivos.aspx.cs. Talvez você queira que haja um default.aspx no diretório para que não seja mostrada nenhuma mensagem de erro para o usuário ou ainda para que todos os arquivos não sejam listados. Você pode renomear o arquivos.aspx para default.aspx, mas para isso terá que "avisar" a rotina que o nome mudou. Você pode fazer isso acrescentando a chave nomeaspx em seu web.config, por exemplo:<add key="nomeaspx" value = "default.aspx"/>Futuramente colocarei para funcionar as opções editar, deletar e upload. Se alguém tiver alguma sugestão ou dúvida, por favor, mande um email para: cassio@br-mono.orgUma última observação: no site do Rudolf Ball não encontrei nenhuma referência à licença utilizada. Colocarei o artigo então sob a GPL. Dessa forma manteremos sempre a menção ao criador original.
Cassio R. Eskelsen

Cassio R. Eskelsen - Desenvolvedor C# desde 2001. Atualmente trabalha como desenvolvedor independente de soluções na área de CRM e mantém um site relacionado ao projeto Mono e a Linguagem Boo: http://www.br-mono.org.