none
Error al subir archivo RRS feed

  • Pregunta

  • Hola

    Estoy trabajando en una app(escritorio) y tengo problemas a subir un archivo a un host, ya lo he probado con Filezilla y si logro conectarme con total normalidad y subir archivos.

    Pero con el código de la aplicación no logro hacerlo, me sale el siguiente error

    Código :

     public static void Upload(string strServer, string strUser, string strPassword,
                               string strFileNameLocal, string strPathFTP)
            {
                FtpWebRequest ftpRequest;
    
                // Crea el objeto de conexión del servidor FTP
                ftpRequest = (FtpWebRequest)WebRequest.Create(string.Format("ftp://{0}/{1}", strServer,
                                                                        Path.Combine(strPathFTP, Path.GetFileName(strFileNameLocal))));
                // Asigna las credenciales
                ftpRequest.Credentials = new NetworkCredential(strUser, strPassword);
                // Asigna las propiedades
                ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
                ftpRequest.UsePassive = true;
                ftpRequest.UseBinary = true;
                ftpRequest.KeepAlive = false;
                // Lee el archivo y lo envía
                using (FileStream stmFile = File.OpenRead(strPathFTP + strFileNameLocal))
                { // Obtiene el stream sobre la comunicación FTP
                    using (Stream stmFTP = ftpRequest.GetRequestStream())==> Error en el servidor remoto:(550)
                    {
                        int cnstIntLengthBuffer = 0;
                        byte[] arrBytBuffer = new byte[cnstIntLengthBuffer];
                        int intRead;
    
                        // Lee y escribe el archivo en el stream de comunicaciones
                        while ((intRead = stmFile.Read(arrBytBuffer, 0, cnstIntLengthBuffer)) != 0)
                            stmFTP.Write(arrBytBuffer, 0, intRead);
                        // Cierra el stream FTP
                        stmFTP.Close();
                    }
                    // Cierra el stream del archivo
                    stmFile.Close();
                }
            }
    Esto sucede cuando trato de subir cualquier archivo.
     

    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    • Editado Pedro Ávila lunes, 16 de septiembre de 2013 21:30 xxxxxxxxxxxxxx
    lunes, 16 de septiembre de 2013 21:29

Respuestas

  • Hola Pedro, revisando tu código he visto que el error puede darse aqui

    FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(string.Format("ftp://{0}/{1}", strServer,Path.Combine(strPathFTP, Path.GetFileName(strFileNameLocal))));

    Estas seguro que en tu servidor ftp existe la ruta strPathFTP?

    Puedes mostrame como queda la URL que la pasas a Create?


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    • Marcado como respuesta Pedro Ávila martes, 17 de septiembre de 2013 1:56
    martes, 17 de septiembre de 2013 0:07
    Moderador
  • Ese es el problema. Te explico. Cuando vas a hacer un upload, lo que haces es conectarte al servidor ftp a una ruta dada y se crea un archivo. Luego se abre un stream a dicho fichero y lo que haces es copiar tu archivo que tienes en tu equipo al stream abierto (un canal). Lo entiendes? Ahora lo que tenemos que hacer es en el create de ftpwebrequest unicamente(para probar ok?) es pasarle la ip y el nombre del fichero...espero me vayas siguiendo compañero. Que aqui ya son casi las 3am jejejej. Si no te contwsto mañana hablamos ok?

    FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(string.Format("ftp://{0}/{1}", strServer,Path.GetFileName(strFileNameLocal)));


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    • Marcado como respuesta Pedro Ávila martes, 17 de septiembre de 2013 1:53
    martes, 17 de septiembre de 2013 0:20
    Moderador

Todas las respuestas

  • hola

    How to: Upload Files with FTP

    habias revisado el articulo

    para un upload no necesitas realizar el GetRequestStream() eso imagino es para la descarga

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 16 de septiembre de 2013 21:34
  • Hola Leandro 

    Con este código también me sale error :

    public static void Upload(string strServer, string strUser, string strPassword,
                               string strFileNameLocal, string strPathFTP)
            {
                FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(string.Format("ftp://{0}/{1}", strServer,
                                                                        Path.Combine(strPathFTP, Path.GetFileName(strFileNameLocal))));
                request.Method = WebRequestMethods.Ftp.UploadFile;
                request.Credentials = new NetworkCredential(strUser, strPassword);
                request.UsePassive = true;
                request.UseBinary = true;
                request.KeepAlive = true;
                //RUTA DONDE ESTA HUBICADO EL ARCHIVO
                FileStream stream = File.OpenRead(strPathFTP + strFileNameLocal);
                byte[] buffer = new byte[stream.Length];
                stream.Read(buffer, 0, buffer.Length);
                stream.Close();
                Stream reqStream = request.GetRequestStream(); Error 550
                reqStream.Write(buffer, 0, buffer.Length);
                reqStream.Flush();
                reqStream.Close();
            }
    Probare comentando desde sonde esta en negrita hacia abajo


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    • Editado Pedro Ávila lunes, 16 de septiembre de 2013 22:32 XXXXXXXXXXXX
    lunes, 16 de septiembre de 2013 22:32
  • También podría ser tema de permisos en esa carpeta de tu servidor ftp...puede que no tengas acceso con las credenciales que pasas para crear archivos. Se que has escrito que con filezilla.conectabas bien pero son las mismas credenciales en el filezilla que en tu programa?

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    lunes, 16 de septiembre de 2013 22:51
    Moderador
  • Para conseguir la ruta del archivo se me ocurrío esto

    private void btnAdjuntar_Click(object sender, EventArgs e)
            {
                OpenFileDialog file = new OpenFileDialog();
      
                if (DialogResult.OK == file.ShowDialog(this))
                    Archivo = file.FileName;
                
    
                nombreArch = Path.GetFileName(Archivo);
                
                ruta = Path.GetDirectoryName(Archivo);
            }
    No se si este puede ser el error.


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    • Editado Pedro Ávila lunes, 16 de septiembre de 2013 22:57 xxxxxxxxxxx
    lunes, 16 de septiembre de 2013 22:57
  • Hola Sergio si uso las mismas credenciales.

    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    lunes, 16 de septiembre de 2013 22:59
  • En este caso para conectarme si pongo ftp://00.00.00.0 me dice que no reconoce FTP, pero si le paso el ip 00.00.00.0 ahí si conecta, pero el problema es en 

    public static void Upload(string strServer, string strUser, string strPassword,
                               string strFileNameLocal, string strPathFTP)
            {
                FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(string.Format("ftp://{0}/{1}", strServer,
                                                                        Path.Combine(strPathFTP, Path.GetFileName(strFileNameLocal))));
                request.Method = WebRequestMethods.Ftp.UploadFile;
                request.Credentials = new NetworkCredential(strUser, strPassword);
                request.UsePassive = true;
                request.UseBinary = true;
                request.KeepAlive = true;
                //RUTA DONDE ESTA HUBICADO EL VIDEO
                FileStream stream = File.OpenRead(strPathFTP + strFileNameLocal);
                byte[] buffer = new byte[stream.Length];
                stream.Read(buffer, 0, buffer.Length);
                stream.Close();
                Stream reqStream = request.GetRequestStream();
                reqStream.Write(buffer, 0, buffer.Length);
                reqStream.Flush();
                reqStream.Close();
            }

    Me dice que el archivo no existe error 550, que puede ser el error la variable reqStream me trae null


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    lunes, 16 de septiembre de 2013 23:54
  • Hola Pedro, revisando tu código he visto que el error puede darse aqui

    FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(string.Format("ftp://{0}/{1}", strServer,Path.Combine(strPathFTP, Path.GetFileName(strFileNameLocal))));

    Estas seguro que en tu servidor ftp existe la ruta strPathFTP?

    Puedes mostrame como queda la URL que la pasas a Create?


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    • Marcado como respuesta Pedro Ávila martes, 17 de septiembre de 2013 1:56
    martes, 17 de septiembre de 2013 0:07
    Moderador
  • En mi servidor no existe la ruta strPathFTP


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

     "ftp://190.81.188.19/E:/venta.jpg" Esta ruta no existe en el server

    • Editado Pedro Ávila martes, 17 de septiembre de 2013 0:13 xxxxxxxxxx
    martes, 17 de septiembre de 2013 0:12
  • Ese es el problema. Te explico. Cuando vas a hacer un upload, lo que haces es conectarte al servidor ftp a una ruta dada y se crea un archivo. Luego se abre un stream a dicho fichero y lo que haces es copiar tu archivo que tienes en tu equipo al stream abierto (un canal). Lo entiendes? Ahora lo que tenemos que hacer es en el create de ftpwebrequest unicamente(para probar ok?) es pasarle la ip y el nombre del fichero...espero me vayas siguiendo compañero. Que aqui ya son casi las 3am jejejej. Si no te contwsto mañana hablamos ok?

    FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(string.Format("ftp://{0}/{1}", strServer,Path.GetFileName(strFileNameLocal)));


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    • Marcado como respuesta Pedro Ávila martes, 17 de septiembre de 2013 1:53
    martes, 17 de septiembre de 2013 0:20
    Moderador
  • Funcionó, no había visto ese detalle, gracias Sergio!!!

    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    martes, 17 de septiembre de 2013 1:53