none
Download de servidor ftp via asp.net RRS feed

  • Pergunta

  • Galera, estou um tempão pesquisando, mas não consigo achar uma solução de jeito nenhum.

    Seguinte, preciso de um servidor com grande capacidade para armazenar uns arquivos(são arquivos de power point em maioria .pptx). No começo tentei utilizar o OneDrive, mas não consegui de jeito nenhum utilizar a classe no c#, então no final acabei optando por um servidor ftp mesmo. O código já está todo pronto, porém não estou conseguindo fazer o download em si, estarei anexando o código, mas se alguém souber de algo com o OneDrive, já ficaria bem grato. Se puderem ajudar... abraço!

    public void downloadArquivo(string caminhoServidor, string caminhoCliente)
        {
            string _ftpURL = servidor; //Host URL or address of the SFTP server
            string _UserName = usuario;     //User Name of the SFTP server
            string _Password = senha;  //Password of the SFTP server
            int _Port = 22;                 //Port No of the SFTP server (if any)
            string _ftpDirectory = caminhoServidor;
    //"ftp://portalte.somee.com/www.portalte.somee.com/public_html/ConteudoTE" + caminhoServidor; 
    
            string LocalDirectory = caminhoCliente
    //"C://Users//Public"; AQUI QUE EU NÃO ENTENDI, se o usuario vai fazer um download, pq eu tenho que dizer onde será salvo na máquina? não existe uma forma de disponibilizar o download igual em html? que coloco um caminho e o cara baixa?
    
            Sftp oSftp = new Sftp(_ftpURL, _UserName, _Password);
            oSftp.Connect(_Port);
            ArrayList FileList = oSftp.GetFileList(_ftpDirectory);
            FileList.Remove(".");
            FileList.Remove("..");          //Remove . from the file list
            FileList.Remove("Processed");   //Remove folder name from the file list. If there is no folder name remove the code.
    
            for (int i = 0; i < FileList.Count; i++)
            {
                if (!File.Exists(LocalDirectory + "/" + FileList[i]))
                {
                    oSftp.Get(_ftpDirectory + "/" + FileList[i], LocalDirectory + "/" + FileList[i]);
                    Thread.Sleep(100);
                }
            }
            oSftp.Close();
        }

    Minha maior dúvida é: tem como disponibilizar o download pro usuário, sem ter que dizer um caminho, deixar que ele escolha o caminho, tipo como se faz em html?

    Eu entendi que nesse código eu estou lendo e criando um novo arquivo, mas procuro um método para disponibilizar o download igual a maioria dos sites. Se puderem ajudar, agradeço desde já!

    quinta-feira, 28 de maio de 2015 12:18

Respostas

  • Opa, tudo bom Rennan?

    Veja o código abaixo, é um exemplo de um método que faz o download contactando um FTP configurado no IIS.

    using System;
    using System.IO;
    using System.Net;
    using System.Text;
    
    namespace Examples.System.Net
    {
        public class WebRequestGetExample
        {
            public static void Main ()
            {
                // Retorna um objeto de request para comunicação com o servidor.
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.contoso.com/test.htm");
                request.Method = WebRequestMethods.Ftp.DownloadFile;
    
                // Este exemplo assume que o seu FTP utiliza autenticação anonima (NÃO RECOMENDADO SEM FTP ADDRESS AND DOMAIN RESTRICTION CONFIGURADO).
                request.Credentials = new NetworkCredential ("anonymous", "janeDoe@contoso.com");
    
                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
        
                Stream responseStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(responseStream);
                Console.WriteLine(reader.ReadToEnd());
    
                Console.WriteLine("Download Terminado, status {0}", response.StatusDescription);
        
                reader.Close();
                response.Close();  
            }
        }
    }

    O exemplo foi tirado dessa página, que não contém muito mais além do código, mas segue de qualquer forma. Os outros dois links estão em inglês, mas é conteúdo relevante de como fazer a operação que você está querendo com C# e FTP.

    MSDN: FTP and C# File Download

    Download com C# e FTP

    Espero que possa te ajudar.

    Sucesso!

    • Marcado como Resposta rennanrr quinta-feira, 28 de maio de 2015 20:14
    quinta-feira, 28 de maio de 2015 16:49
  • Puxa cara, nunca trabalhei com integração com o OneDrive. Mas tenta ver esse links aqui que provavelmente vão te ajudar:

    Diretrizes para acessar o OneDrive via aplicativo

    Integrating OneDrive into Your Windows Store Apps

    The Live SDK

    How to dowload/upload file onto a users onedrive

    E se alguma dessas respostas lhe foi útil, não esquece de marcar e dar um upvote ^^

    Boa sorte!

    • Sugerido como Resposta Samuel Pelaquim sexta-feira, 29 de maio de 2015 15:04
    • Marcado como Resposta Marcos SJ quarta-feira, 2 de setembro de 2015 19:17
    quinta-feira, 28 de maio de 2015 18:15
  • Opa, posso sugerir uma ou outra coisa sim.

    Você está utilizando IIS? Se sim, segue abaixo a página do technet do IIS. Lá você vai ver como instalar, configurar e gerenciar o FTP no IIS. É bem simples mesmo.

    IIS 7.0

    Quanto ao código, como eu falei é só um exemplo, de um dos links que eu te passei. Você vai precisar mudar a url para que seja a url do seu FTP, vai ter que utilizar um construtor da classe NetworkCredential em que você possa inserir usuário e senha do seu FTP, e fazer as demais alterações necessárias no código pra que ele funcione no seu programa. Leia os artigos que eu te enviei que você vai entender tudo que precisa pra trabalhar com IIS e FTP.

    Aquele abraço!

    • Sugerido como Resposta Samuel Pelaquim sexta-feira, 29 de maio de 2015 15:04
    • Marcado como Resposta Marcos SJ quarta-feira, 2 de setembro de 2015 19:17
    sexta-feira, 29 de maio de 2015 15:03

Todas as Respostas

  • Opa, tudo bom Rennan?

    Veja o código abaixo, é um exemplo de um método que faz o download contactando um FTP configurado no IIS.

    using System;
    using System.IO;
    using System.Net;
    using System.Text;
    
    namespace Examples.System.Net
    {
        public class WebRequestGetExample
        {
            public static void Main ()
            {
                // Retorna um objeto de request para comunicação com o servidor.
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.contoso.com/test.htm");
                request.Method = WebRequestMethods.Ftp.DownloadFile;
    
                // Este exemplo assume que o seu FTP utiliza autenticação anonima (NÃO RECOMENDADO SEM FTP ADDRESS AND DOMAIN RESTRICTION CONFIGURADO).
                request.Credentials = new NetworkCredential ("anonymous", "janeDoe@contoso.com");
    
                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
        
                Stream responseStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(responseStream);
                Console.WriteLine(reader.ReadToEnd());
    
                Console.WriteLine("Download Terminado, status {0}", response.StatusDescription);
        
                reader.Close();
                response.Close();  
            }
        }
    }

    O exemplo foi tirado dessa página, que não contém muito mais além do código, mas segue de qualquer forma. Os outros dois links estão em inglês, mas é conteúdo relevante de como fazer a operação que você está querendo com C# e FTP.

    MSDN: FTP and C# File Download

    Download com C# e FTP

    Espero que possa te ajudar.

    Sucesso!

    • Marcado como Resposta rennanrr quinta-feira, 28 de maio de 2015 20:14
    quinta-feira, 28 de maio de 2015 16:49
  • Opa, tudo bom Rennan?

    Veja o código abaixo, é um exemplo de um método que faz o download contactando um FTP configurado no IIS.

    using System;
    using System.IO;
    using System.Net;
    using System.Text;
    
    namespace Examples.System.Net
    {
        public class WebRequestGetExample
        {
            public static void Main ()
            {
                // Retorna um objeto de request para comunicação com o servidor.
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.contoso.com/test.htm");
                request.Method = WebRequestMethods.Ftp.DownloadFile;
    
                // Este exemplo assume que o seu FTP utiliza autenticação anonima (NÃO RECOMENDADO SEM FTP ADDRESS AND DOMAIN RESTRICTION CONFIGURADO).
                request.Credentials = new NetworkCredential ("anonymous", "janeDoe@contoso.com");
    
                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
        
                Stream responseStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(responseStream);
                Console.WriteLine(reader.ReadToEnd());
    
                Console.WriteLine("Download Terminado, status {0}", response.StatusDescription);
        
                reader.Close();
                response.Close();  
            }
        }
    }

    O exemplo foi tirado dessa página, que não contém muito mais além do código, mas segue de qualquer forma. Os outros dois links estão em inglês, mas é conteúdo relevante de como fazer a operação que você está querendo com C# e FTP.

    MSDN: FTP and C# File Download

    Download com C# e FTP

    Espero que possa te ajudar.

    Sucesso!

    Obrigado! Ajudou demais mesmo! Perfeito! Porém, queria saber se não consegue me ajudar e outra coisa, vc sabe de algum link onde alguém esteja usando um servidor asp.net e disponibilizando downloads direto do OneDrive?
    quinta-feira, 28 de maio de 2015 17:22
  • Puxa cara, nunca trabalhei com integração com o OneDrive. Mas tenta ver esse links aqui que provavelmente vão te ajudar:

    Diretrizes para acessar o OneDrive via aplicativo

    Integrating OneDrive into Your Windows Store Apps

    The Live SDK

    How to dowload/upload file onto a users onedrive

    E se alguma dessas respostas lhe foi útil, não esquece de marcar e dar um upvote ^^

    Boa sorte!

    • Sugerido como Resposta Samuel Pelaquim sexta-feira, 29 de maio de 2015 15:04
    • Marcado como Resposta Marcos SJ quarta-feira, 2 de setembro de 2015 19:17
    quinta-feira, 28 de maio de 2015 18:15
  • Opa, tudo bom Rennan?

    Veja o código abaixo, é um exemplo de um método que faz o download contactando um FTP configurado no IIS.

    using System;
    using System.IO;
    using System.Net;
    using System.Text;
    
    namespace Examples.System.Net
    {
        public class WebRequestGetExample
        {
            public static void Main ()
            {
                // Retorna um objeto de request para comunicação com o servidor.
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.contoso.com/test.htm");
                request.Method = WebRequestMethods.Ftp.DownloadFile;
    
                // Este exemplo assume que o seu FTP utiliza autenticação anonima (NÃO RECOMENDADO SEM FTP ADDRESS AND DOMAIN RESTRICTION CONFIGURADO).
                request.Credentials = new NetworkCredential ("anonymous", "janeDoe@contoso.com");
    
                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
        
                Stream responseStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(responseStream);
                Console.WriteLine(reader.ReadToEnd());
    
                Console.WriteLine("Download Terminado, status {0}", response.StatusDescription);
        
                reader.Close();
                response.Close();  
            }
        }
    }

    O exemplo foi tirado dessa página, que não contém muito mais além do código, mas segue de qualquer forma. Os outros dois links estão em inglês, mas é conteúdo relevante de como fazer a operação que você está querendo com C# e FTP.

    MSDN: FTP and C# File Download

    Download com C# e FTP

    Espero que possa te ajudar.

    Sucesso!

    Samuel, estou até agora tentando usar esse código que você passou, mas não entendi como devo configurar o servidor, devo configurar o servidor em que o asp é hospedado ou o servidor em que o ftp é hospedado?

    Se puder me ajudar com um link que seja, agradeço desde já!

    sexta-feira, 29 de maio de 2015 14:38
  • Opa, posso sugerir uma ou outra coisa sim.

    Você está utilizando IIS? Se sim, segue abaixo a página do technet do IIS. Lá você vai ver como instalar, configurar e gerenciar o FTP no IIS. É bem simples mesmo.

    IIS 7.0

    Quanto ao código, como eu falei é só um exemplo, de um dos links que eu te passei. Você vai precisar mudar a url para que seja a url do seu FTP, vai ter que utilizar um construtor da classe NetworkCredential em que você possa inserir usuário e senha do seu FTP, e fazer as demais alterações necessárias no código pra que ele funcione no seu programa. Leia os artigos que eu te enviei que você vai entender tudo que precisa pra trabalhar com IIS e FTP.

    Aquele abraço!

    • Sugerido como Resposta Samuel Pelaquim sexta-feira, 29 de maio de 2015 15:04
    • Marcado como Resposta Marcos SJ quarta-feira, 2 de setembro de 2015 19:17
    sexta-feira, 29 de maio de 2015 15:03