Me foi “pedido” para fazer um serviço em C# para upload de arquivo e gostaria de saber se alguém já fez algo do tipo e poderia me ajudar…
Estou recebendo o erro : The remote server returned an error: (550) File unavailable (e.g., file not found, no access).
E nada qye achei no Senhor Google me ajudou ainda…
Obrigado a atenção.
[quote=Kanin Dragon]Jovem,
Poste o código.
Abs,[/quote]
private string subirAnexo(byte[] Buffer, string LoginRemetente, string NomeAnexo)
{
string UrlFtp = "ftp://url";
string UsuarioFtp = "user";
string SenhaUsuarioFtp = "password";
if (!WebRequestMethods.Ftp.ListDirectoryDetails.Contains(UrlFtp + "/" + LoginRemetente))
{
FtpWebRequest CriarPasta = (FtpWebRequest)FtpWebRequest.Create(UrlFtp + "/" + LoginRemetente);
CriarPasta.KeepAlive = false;
CriarPasta.UseBinary = true;
CriarPasta.Credentials = new NetworkCredential(UsuarioFtp, SenhaUsuarioFtp);
CriarPasta.Method = WebRequestMethods.Ftp.MakeDirectory;
FtpWebResponse RespostaCriarPasta = (FtpWebResponse)CriarPasta.GetResponse();
RespostaCriarPasta.Close();
}
if (WebRequestMethods.Ftp.ListDirectoryDetails.Contains(UrlFtp + "/" + LoginRemetente + "/" + NomeAnexo))
{
NomeAnexo = "(2) " + NomeAnexo;
}
FtpWebRequest RequestUpload = (FtpWebRequest)FtpWebRequest.Create(UrlFtp + "/" + LoginRemetente + "/" + NomeAnexo);
RequestUpload.Credentials = new NetworkCredential(UsuarioFtp, SenhaUsuarioFtp);
RequestUpload.UsePassive = true;
RequestUpload.UseBinary = true;
RequestUpload.KeepAlive = false;
//RequestUpload.Method = WebRequestMethods.Ftp.UploadFile;
Stream RequestStream = RequestUpload.GetRequestStream();
RequestStream.Write(Buffer, 0, Buffer.Length);
RequestStream.Close();
return "\n\n\nAnexo será encontrado em: " + UrlFtp + "/" + LoginRemetente + "/" + NomeAnexo;
}
Não tem identação aqui porque tô fazendo por acesso remoto e veio assim =/
A pasta está sendo criada, porém na hora de mandar o arquivo ele recebe a excessão
Consegir deixar de um jeito aceitável (funcionando)
Postarei o código aqui pra se alguém tiver o mesmo problema no futuro, ou tiver que fazer a mesma coisa
private string subirArquivo(byte[] Buffer, string UsuarioDoFtp, string NomeArquivo)
{
string UrlFtp = "ftp://LocalFtp";
string UsuarioFtp = "usuario";
string SenhaUsuarioFtp = "senha";
//Tenta criar a pasta...
try
{
FtpWebRequest CriarPasta = (FtpWebRequest)FtpWebRequest.Create(UrlFtp + "/" + UsuarioDoFtp);
CriarPasta.KeepAlive = false;
CriarPasta.UseBinary = true;
CriarPasta.Credentials = new NetworkCredential(UsuarioFtp, SenhaUsuarioFtp);
CriarPasta.Method = WebRequestMethods.Ftp.MakeDirectory;
FtpWebResponse RespostaCriarPasta = (FtpWebResponse)CriarPasta.GetResponse();
RespostaCriarPasta.Close();
}
catch (Exception e)
{
//Pasta já existe
}
FtpWebRequest Request;
Stream RequestStream;
//Verifica se o arquivo já existe
int Contador = 2;
string StringAuxiliar = NomeArquivo;
while (true)
{
Request = (FtpWebRequest)FtpWebRequest.Create(UrlFtp + "/" + UsuarioDoFtp + "/" + NomeArquivo);
Request.Credentials = new NetworkCredential(UsuarioFtp, SenhaUsuarioFtp);
Request.Method = WebRequestMethods.Ftp.GetFileSize;
try
{
FtpWebResponse resposta = (FtpWebResponse)Request.GetResponse();
//Muda o nome porque o arquivo já existe
NomeArquivo = "(" + Contador + ")" + StringAuxiliar;
Contador++;
}
catch (WebException ex)
{
FtpWebResponse resposta = (FtpWebResponse)ex.Response;
if (resposta.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
{
//Arquivo no existe no local
break;
}
}
}//Terminou de verificar existência
Request = (FtpWebRequest)FtpWebRequest.Create(UrlFtp + "/" + UsuarioDoFtp + "/" + NomeArquivo);
Request.Credentials = new NetworkCredential(UsuarioFtp, SenhaUsuarioFtp);
Request.UsePassive = true;
Request.UseBinary = true;
Request.KeepAlive = false;
Request.Method = WebRequestMethods.Ftp.UploadFile;
RequestStream = Request.GetRequestStream();
RequestStream.Write(Buffer, 0, Buffer.Length);
RequestStream.Close();
return "\n\n\nAnexo ser encontrado em: " + UrlFtp + "/" + UsuarioDoFtp + "/" + NomeArquivo;
}