Download de Arquivos FTP

3 respostas
C

Olá pessoal,

Tenho um sistema web, desenvolvido em C# e Aspx que se conecta com um server FTP. Nesse server tenho uns arquivos, e gostaria que o usuário que acessa o sistema conseguisse fazer o download desses arquivos.

Eu consegui gerar uma página que lista os arquivos que estão no servidor, e consegui que fosse feito o download desse arquivo. Porém, eu gostaria que o download fosse feito de forma diferente, invés do arquivo ir direto ao diretório já determinado no código, gostaria que o usuário escolhesse onde salvar, como qualquer download que se faz na internet.

Se fosse um download que fosse feito direto do servidor eu conseguia, mas como é de um servidor FTP, não sei porque, mas não está indo de jeito algum.

Já tentei de várias formas, mas ainda não consegui nada.

Segue abaixo meu código, se tiverem alguma dica pra melhora-lo também eu agradeço:

Listar Arquivos

protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpIP + "/");
                request.Method = WebRequestMethods.Ftp.ListDirectory;
                request.Credentials = new NetworkCredential(ftpUser, ftpPass);
                request.UsePassive = true;
                request.UseBinary = true;
                request.KeepAlive = false;

                FtpWebResponse response = request.GetResponse() as FtpWebResponse;
                Stream responseStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(responseStream);

                while (!reader.EndOfStream)
                {
                    string item = reader.ReadLine();
                    lstArquivos.Items.Add(item);
                }
                reader.Close();
                responseStream.Close();
                response.Close();
            }
            catch(Exception ex)
            {
            MessageBox.Show(ex.Message);
            }
        }

Download do Arquivo Listado

try
            {
                nomeArquivo = lstArquivos.SelectedValue;
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpIP + "/" + nomeArquivo);
                request.Method = WebRequestMethods.Ftp.DownloadFile;
                request.Credentials = new NetworkCredential(ftpUser, ftpPass);

                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                Stream responseStream = response.GetResponseStream();
            
                byte[] buffer = new byte[2048];
                    
                FileStream newFile = new FileStream("c:\\"+nomeArquivo, FileMode.Create); //Aqui invés de ir ao diretório especificado, gostaria que o usuário escolhesse o lugar
            
                int readCount = responseStream.Read(buffer, 0, buffer.Length);
                while (readCount > 0)
                {
                    newFile.Write(buffer, 0, readCount);
                    readCount = responseStream.Read(buffer, 0, buffer.Length);
                }
                newFile.Close();
                responseStream.Close();
                response.Close();
            }
            catch (Exception ex)
            {
            MessageBox.Show(ex.Message);
            }
        }

Obrigado e aguardo um help…

3 Respostas

F

ja pensou em usar FTPClient common apache ?

Veja: http://commons.apache.org/net/apidocs/org/apache/commons/net/ftp/FTPClient.html

t+ e boa sorte.

F

aqui tbm: http://www.guj.com.br/articles/154

t+

C

Fernando,

Isso ai serve para C# também? Pelo que eu vi, essa API é para Java certo?

Se fosse em java seria muito mais simples, pois já tenho algum conhecimento, porém ainda estou engatinhando em .Net c#, é tudo novo praticamente.

Obrigado.

Criado 18 de janeiro de 2012
Ultima resposta 18 de jan. de 2012
Respostas 3
Participantes 2