Usuário com melhor resposta
Incluir arquivo em servidor FTP C# ASP.net

Pergunta
-
Boa Tarde
Preciso desenvolver uma funcionalidade para inserir e baixar arquivos de um servidor FTP em ASP.net C#.
Já busquei aqui no MSDN e Google soluções para o meu problema e encontrei, porém não consigo fazer com que funcione corretamente.
Meu código que insere o arquivo no FTP seria o abaixo, porém quando o executo me apresenta o seguinte erro:
"O servidor remoto retornou um erro: (550) Arquivo não disponível (isto é, arquivo não encontrado, sem acesso)."
Porém a pasta Nova no FTP existe, já coloquei barra no final, porém me retorna outro erro:"O URI solicitado é inválido para o comando de FTP."
O arquivo que quero inserir também está correto.
Consigo acessar este FTP tanto pelo Browser como pelo WinExplorer na mesma máquina que desenvolvo e não me dá problema.
Já inseri configurações de proxy também, mas também me apresentou o seguinte erro:"Não há suporte para o comando de FTP solicitado durante o uso do proxy HTTP.". Sendo que adicionei as seguinte linhas:
ftp.Proxy = new WebProxy("192.168.1.254",3128); ftp.Proxy.Credentials = new NetworkCredential("usuario", "senha");
e retirei a linha que adiciona valor NULL ao proxy.Alguém consegue me dar um auxílio aí?
Agradeço.
FileInfo fileInfo = new FileInfo("C:\\Users\\Teste\\Desktop\\teste.txt"); FtpWebRequest ftp = (FtpWebRequest)WebRequest.Create("ftp://ftp.dominio.com.br/Nova"); ftp.Credentials = new NetworkCredential("usuario", "senha"); ftp.KeepAlive =false; ftp.Proxy = null; ftp.UsePassive =false; ftp.Method = WebRequestMethods.Ftp.UploadFile; ftp.UseBinary =true; ftp.ContentLength = fileInfo.Length; int iBufferLength = 1; byte[] buff = new byte[iBufferLength]; int contentLen; FileStream fs = fileInfo.OpenRead(); Stream strm = ftp.GetRequestStream(); contentLen = fs.Read(buff, 0, iBufferLength); while (contentLen != 0) { strm.Write(buff, 0, iBufferLength); contentLen = fs.Read(buff, 0, iBufferLength); } strm.Close(); fs.Close();
Pedro Henrique Peres
- Movido Levi DomingosModerator quarta-feira, 4 de julho de 2012 20:09 (De:C#)
Respostas
-
Bom Dia,
Após muita busca, e resfrescar a cabeça, consegui resolver meu problema.
Acredito que um dos motivos de não estar funcionando seria o fato de eu não inserir o nome do arquivo na hora de instanciar o FtpWebRequest,
Outro motivo que também notei, seria o fato de eu NÃO estar utilizando conexão passiva.
Após resolver esses pequenos detalhes, finalmente consegui o Upload do arquivo.
Obrigado pela atenção.
Segue o código atual:
FtpWebRequest ftp = (FtpWebRequest)WebRequest.Create("ftp://usuario:senha@ftp.host.com.br/Nova/teste.txt"); ftp.Method = WebRequestMethods.Ftp.UploadFile; ftp.KeepAlive = false; ftp.UsePassive = true; ftp.Proxy = null; ftp.UseBinary = true; StreamReader stream = new StreamReader("C:\\Users\\Pedro\\Desktop\\teste.txt"); byte[] fileContents = Encoding.UTF8.GetBytes(stream.ReadToEnd()); stream.Close(); ftp.ContentLength = fileContents.Length; Stream requestStream = ftp.GetRequestStream(); requestStream.Write(fileContents, 0, fileContents.Length); requestStream.Close(); FtpWebResponse response = (FtpWebResponse)ftp.GetResponse(); Console.WriteLine("Upload de arquivo Completo, status {0}", response.StatusDescription);
Pedro Henrique Peres
- Marcado como Resposta pedrucaperes13 quinta-feira, 5 de julho de 2012 14:06
Todas as Respostas
-
Bom Dia,
Após muita busca, e resfrescar a cabeça, consegui resolver meu problema.
Acredito que um dos motivos de não estar funcionando seria o fato de eu não inserir o nome do arquivo na hora de instanciar o FtpWebRequest,
Outro motivo que também notei, seria o fato de eu NÃO estar utilizando conexão passiva.
Após resolver esses pequenos detalhes, finalmente consegui o Upload do arquivo.
Obrigado pela atenção.
Segue o código atual:
FtpWebRequest ftp = (FtpWebRequest)WebRequest.Create("ftp://usuario:senha@ftp.host.com.br/Nova/teste.txt"); ftp.Method = WebRequestMethods.Ftp.UploadFile; ftp.KeepAlive = false; ftp.UsePassive = true; ftp.Proxy = null; ftp.UseBinary = true; StreamReader stream = new StreamReader("C:\\Users\\Pedro\\Desktop\\teste.txt"); byte[] fileContents = Encoding.UTF8.GetBytes(stream.ReadToEnd()); stream.Close(); ftp.ContentLength = fileContents.Length; Stream requestStream = ftp.GetRequestStream(); requestStream.Write(fileContents, 0, fileContents.Length); requestStream.Close(); FtpWebResponse response = (FtpWebResponse)ftp.GetResponse(); Console.WriteLine("Upload de arquivo Completo, status {0}", response.StatusDescription);
Pedro Henrique Peres
- Marcado como Resposta pedrucaperes13 quinta-feira, 5 de julho de 2012 14:06
-
Eu sei que é velho esse post, mas tem outra maneira de fazer se quiser com WebClient.
var uri = new Uri("ftp://ftp.host.net/pasta-ftp/nome_do_seu_arquivo.txt");
using (var webClient = new System.Net.WebClient())
{
webClient.Credentials = new System.Net.NetworkCredential("user", "password");
webClient.UploadFile(uri, @"c:\temp\nome_do_seu_arquivo.txt");
}- Editado rodrigoalves96 segunda-feira, 15 de junho de 2015 17:49
-
Muito obrigado por postar esta solução. Mesmo após 6 anos depois e este post continua sendo útil.
- Editado Eduardo GT Sobrinho quarta-feira, 23 de maio de 2018 13:36