none
no funciona mi upload en un servidor linux RRS feed

  • Pregunta

  • BUENAS TARDES NECESITO DE SU AYUDA ESTOY REALIZANDO UN PROGRAMITA PARA QUE ME REALICE MIS BACKUPS DE MANERA AUTOMATICA DE MIS BASES DE DATOS  DE UN SERVIDOR LOCAL A UNO REMOTO QUE ESTA EN LINUX. EN MIS PRUEBAS ME FUNCIONA MI CODIGO ME DEJA ALMACENAR UN ARCHIVO GENERADO  SE CONECTA Y SUBE LA INFORMACION AL FTP CON SISTEMA OPERATIVO WINDOWS.  SIN EMBARGO EN MI SERVIDOR QUE TENGO CENT OS 5.5 NO FUNCIONA  ME APARECE LA LEYENDA    Error en el servidor remoto: (553) No se permite el nombre de archivo.

    REALICE PRUEBAS INSTALANDO FILEZILLA Y REALIZANDO UNA TRASFERENCIA DE ESE ARCHIVO QUE ME MARCA ERROR EN MI CODIGO Y CON FILEZILLA NO GENERA NINGUN ERROR LO TRASFIERE DE MANERA CORRECTA

    MI CODIGO ES EL SIGUIENTE

    SIN MAS POR EL MOMENTO ME DESPIDO 
    public static void UploadFileToFtp(string ftp ,string filePath, string username, string password)
    {
        //ErrorLog oErrorLog = new ErrorLog();
        //try
        //{


        var fileName = Path.GetFileName(@filePath);
        var request = (FtpWebRequest)WebRequest.Create(@ftp + fileName);

        request.Method = WebRequestMethods.Ftp.UploadFile;
        request.Credentials = new NetworkCredential(username, password);
        request.UsePassive = true;
        request.UseBinary = true;
        request.KeepAlive = false;



        using (var fileStream = File.OpenRead(@filePath))
        {
            using (var requestStream = request.GetRequestStream())
            {   
                

                fileStream.CopyTo(requestStream);
                requestStream.Close();
            }
        }

       
       var response = (FtpWebResponse)request.GetResponse();

           
            Console.WriteLine("El Archivo  {0}" + fileName + "Subio correctamente: {0}", response.StatusDescription);
            response.Close();
        //}
        //catch (Exception ex)
        //{
        //    oErrorLog.WriteErrorLog(ex.ToString());
        //}

    }

    martes, 10 de noviembre de 2015 0:53

Respuestas

  • Hola

    He visto algunos ejemplos y en la creacion del WebRequest usan un objeto URI

    string filename = "archivo";
        string ftpServerIP = "ftp.demo.com/";
        string ftpUserName = "dummy";
        string ftpPassword = "dummy";
    
        FtpWebRequest objFTPRequest;
    
        // Create FtpWebRequest object 
    
    var direccion=new Uri("ftp://" + ftpServerIP + "/" + filename);
    
        objFTPRequest = (FtpWebRequest)FtpWebRequest.Create(direccion);
    
    

    Intenta agregarlo con

    var direccion=new Uri("ftp://" + ftpServerIP + "/" + filename);

    Saludos


    martes, 10 de noviembre de 2015 23:54

Todas las respuestas

  • Hola

    En algunos clients de FTP que he usado a veces con los Linux si el nombre del archive tiene espacios, o usa mayusculas genera algun error.

    Trata de enviarlos sin espacios y todo en minusculas.

        var request = (FtpWebRequest)WebRequest.Create(@ftp + filename.Replace(" ","").ToLower());

    Saludos

    martes, 10 de noviembre de 2015 2:20
  • hola

    lo primero que puedo comentarte es que no deberias escribir en mayuscula, esto significa que estas gritando y no queda bien

    por otro lado como accedes al servidor linux desde la pc con windows donde hosteas el sitio web ? solo puedes hacerlo por ftp

    >>Error en el servidor remoto: (553) No se permite el nombre de archivo.

    estas seguro que al subir al servidor linux sigues als normas de este sistema operativo ? porque recuerda que quizas no permite nombres de archivos muy largos

    si subes al servidor usando un cliente de FTP te deja hacerlo ? para descartar que sea un tema del desarrollo o es algo mas general

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    martes, 10 de noviembre de 2015 3:50
  • estimado roberto primero que nada gracias por el apoyo te comento ya realice la prueba  tal y como me recomiendas quitandole los espacios en blanco y convirtiendolo en minuscula  y sigue sin funcionar 

    saludos cordiales

    martes, 10 de noviembre de 2015 22:24
  • Hola

    Que valor tienen estas variables?

    (@ftp + filename)

    Nos podrias indicar para ver si hay algo extraño en el nombre del archive.

    SAludos

    martes, 10 de noviembre de 2015 22:58
  • hola buenas tardes  leandro primero que nada gracias por el apoyo 

    te platico el escenario son 2 servidores  que tengo en produccion de 2 empresas diferentes con windows server 2008 y uno de respaldo en linux con cent os  todos estos se encuentran en la nube los servidores se pueden ver entre si.

    la aplicacion que quiero realizar es para copiar los respaldos de mis base de datos que son algo pesadas cumpliento el requisito que sean del dia en curso, estas encuentran ubicados en una ruta especifica comprimidos en rar en cada uno mis servidores de produccion y subirlos al servidor de respaldos  en linux por medio del protocolo FTP.

    realizando pruebas mi codigo funciona en ftp que estan unicamente en windows y no en el de linux que es el que me interesa.

    estoy enviando bases de datos siguiendo la nomenclatura de nombre nombreddmmyyyy     por ejemplo  autos10112015 lo cual es valida en linux ya que realizando pruebas con el cliente filezilla para acceder al ftp que se encuentra en linux desde mi entorno de desarollo y desde los servidores de produccion si permite copiar las bases de datos que emplee de prueba.

    te anexo el codigo completo

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Configuration;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Text;
    using System.Threading.Tasks;
    using ConsoleApplication1;
    using FtpLib;
    
    class Program
    
    {
    
        static void Main(string[] args)
        {
            
            string FilePath = string.Empty;
             
           // string hostIp = "ftp://148.235.152.56";
    
            string hostIP = ConfigurationManager.AppSettings["ftp"];
            string remoteDirectory = ConfigurationManager.AppSettings["remoteDirectory"];
            string userName = ConfigurationManager.AppSettings["userName"];
            string password = ConfigurationManager.AppSettings["password"];
    
            string ftp = hostIP + remoteDirectory;
            ArrayList listDataBase = new ArrayList();
            listDataBase = listDiectoryDatabase();
    
           foreach (string DataBase in listDataBase)
           {
                FilePath = string.Empty;
                FilePath = DataBase.ToString();
                Console.WriteLine("{0}",DataBase );
                UploadFileToFtp(@ftp ,@FilePath ,userName, password);
             
           }
           
            Console.ReadKey();
       }
        
    private static ArrayList listDiectoryDatabase()
    {
          //Hashtable list = new Hashtable();
        ArrayList listDatabase = new ArrayList();
    
        try
        {
             string local= ConfigurationManager.AppSettings["DirectoryLocal"];
             string type = ConfigurationManager.AppSettings["type"];
            DirectoryInfo directory = new DirectoryInfo(@local);
            FileInfo[] files = directory.GetFiles(type);
            DirectoryInfo[] directories = directory.GetDirectories();
    
            for (int i = 0; i < files.Length; i++)
            {
    
    
             
                if((files[i]).CreationTime.Date==DateTime.Now.Date)
                {
                    listDatabase.Add(((FileInfo)files[i]).FullName);
                }
            }
     
    }
        catch (Exception ex)
    
        {
            Console.WriteLine(ex.ToString());
        }
    
    return listDatabase;
    }
    
    
    public static void UploadFileToFtp(string ftp ,string filePath, string username, string password)
    {
    
    
    
        var fileName = Path.GetFileName(@filePath);
        var request = (FtpWebRequest)WebRequest.Create(@ftp + fileName.Replace(" ", "").ToLower());
    
        request.Method = WebRequestMethods.Ftp.UploadFile;
        request.Credentials = new NetworkCredential(username, password);
        request.UsePassive = true;
        request.UseBinary = true;
        request.KeepAlive = false;
    
    
    
        using (var fileStream = File.OpenRead(@filePath))
        {
          
            using (var requestStream = request.GetRequestStream())
            {   
                
    
                fileStream.CopyTo(requestStream);
                requestStream.Close();
            }
        }
    
       
       var response = (FtpWebResponse)request.GetResponse();
    
           
            Console.WriteLine("El Archivo  {0}" + fileName + "Subio correctamente: {0}", response.StatusDescription);
            response.Close();
        //}
        //catch (Exception ex)
        //{
        //    oErrorLog.WriteErrorLog(ex.ToString());
        //}
    
    }
    
    
    
    
    }
    
    
    
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
        </startup>
    
      <appSettings>
    
        <!--ftp-->
        <add key="ftp" value="ftp://187.191.86.147" />
    
        <!--directorio remoto del servidor de respaldos en linux-->
        <add key="remoteDirectory" value="/disco_2/respaldos/"/>
        <!--usuario ftp-->
        <add key="userName" value="soporte" />
        <!--contraseña ftp-->
        <add key="password" value="$2428kdhh4423" />
        <!--log -->
        <add key="LogDirectory" value="d:\"/>
        <!--ruta donde se encuntran las bases de datos que voy a respaldar-->
        <add key="DirectoryLocal" value="d:\backup_databases\"/>
    
        <!--tipo de archivo que va respaldar en la ubicacion-->
        <add key="type" value="*.rar*"/>
      
    
        
        
      </appSettings>
      
    </configuration>
    
    



    martes, 10 de noviembre de 2015 23:17
  • hola noberto

    todo parace estar bien en el nombre en mis pruebas estos son los valores que tienen

    la variable @ftp
    ftp://187.191.86.147/disco_2/respaldos/

    la variable filename
    autos10112015.rar

    concatenado (@ftp + filename)

    ftp://187.191.86.147/disco_2/respaldos/autos10112015.rar

    martes, 10 de noviembre de 2015 23:48
  • Hola

    He visto algunos ejemplos y en la creacion del WebRequest usan un objeto URI

    string filename = "archivo";
        string ftpServerIP = "ftp.demo.com/";
        string ftpUserName = "dummy";
        string ftpPassword = "dummy";
    
        FtpWebRequest objFTPRequest;
    
        // Create FtpWebRequest object 
    
    var direccion=new Uri("ftp://" + ftpServerIP + "/" + filename);
    
        objFTPRequest = (FtpWebRequest)FtpWebRequest.Create(direccion);
    
    

    Intenta agregarlo con

    var direccion=new Uri("ftp://" + ftpServerIP + "/" + filename);

    Saludos


    martes, 10 de noviembre de 2015 23:54