style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Subir un archivo por FTP

Hola, ya he podido crear una aplicacion usando el Cliente FTP de Apache Commons Net.
Mi programa ya conecta al host, y se loggea con el usuario y contraseña, e incluso entra en Modo Pasivo muy Bien. El problema es a la hora de subir un archivo. me da el siguiente error en la consola:

Couldn't initiate transfer. Check that filenames are valid.

aqui una parte de mi codigo cuando uploadeo mi archivo.

 
String f1=campoTexto.getText();
InputStream in;
ftp = new FTPClient();
//Despues de haberse conectado y loggeado

File f1=new File(file1);
in=new FileInputStream(f1);
if (ftp.storeFile(file1,in))
{
    javax.swing.JOptionPane.showMessageDialog(null,"Archivo enviado exitosamente",";)",1);
}
else
{
    System.err.println(
    "Couldn't initiate transfer.  Check that filenames are valid.");
    break __main;
}

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Supongo que en String f1 =

Supongo que en

String f1 = campoText.getText();

quisiste en realidad escibir:

String file1 = campoTexto.getText()

Sabes que el mensaje de error te sale por que tu mismo lo escribiste en el else verdad? verdad?

La documentación de ese método ( storeFile ) no dice que puede causar que no puedas almacenar el archivo:

Returns: True if successfully completed, false if not.

Lo que podrías intentar es conectarte tu mismo desde la línea de comandos para ver si tienes permisos. Me suena a que el usuario que estás usando no puede de por sí escribir.

Otra opción es que la ruta del archivo donde quieres escribir no existe. Por ejemplo tu servidor destino es UNIX y tu estas queriendo escribir:

C:\>Mis Documentos\Sha la la\archivo.txt

Y obvio no te va a funcionar.

En tu código se ve que tu estás leyendo y escribiendo el mismo archivo ( con la misma ruta y todo )

Revisa que le estás mandando en realidad.

Imagen de ezamudio

ruta absoluta

Como dice Oscar, intenta primero con un cliente FTP normal, subir un archivo con el mismo usuario que estás usando en tu app. Si eso no funciona, es bronca de permisos del usuario y obvio no va a funcionar desde la app tampoco y la solución está fuera del alcance de este sitio.

Si con un cliente ftp normal funciona, entonces la bronca puede ser que en el campo de texto escribes el puro nombre del archivo, y cuando lo creas con File f1 = new File(nombre) pues el archivo realmente no existe (el objeto File sí, pero el archivo que quieres subir, no existe)... eso lo puedes comprobar con f1.exists(), de hecho para subirlo primero te convendría checar f1.exists() && f1.canRead() && f1.isFile() (para que no vayas a subir un directorio o un archivo que no puedes abrir).

Y por último, ese FileInputStream que abres con el archivo, te sobra. No veo que hagas nada con él. Tal vez en Windows incluso el problema es que el archivo sí existe, pero como ya lo abriste con ese FIleInputStream, no se puede abrir de nuevo para enviarse por FTP...

Por cierto, el nombre del

Por cierto, el nombre del archivo es el de destino y el inpus stream debe de cerrarse siempre al terminar la invocación.

Ahi te va esta liga por si no la has leído:

http://commons.apache.org/net/api/org/apache/commons/net/ftp/FTPClient.html#storeFile(java.lang.String, java.io.InputStream)

Alguién más ve raro ese "break __main;"

:)

Imagen de ezamudio

Origen/Destino

Entonces deberia ser ftp.storeFile(f1.getName(), in); tal vez no sube el archivo porque le pasan ruta absoluta para encontrarlo localmente pero esa ruta es inválida en el server.

Gracias

Muchas gracias por sus respuestas, en efecto estaba mal el path del archivo, ya que usaba un JFileChooser y no obtenia el path, solo el nombre.
ademas de que tambien usaba el metodo:
ftp1.enterRemotePassiveMode();
lo que me impedia guardar el archivo, Gracias...

lo del break __main; es un label que habia creado para intentar varias veces loggearse en caso de no haber podido autentificarse.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">