jboss - Java apache FTPServer and common.net FTPClient -
i trying upload file on java ftpserver.
the file transfert ok, uploaded file have 6ko data.
i use embedded method launch ftpserver in ejb service bean needed application
here code use:
package com.cs3drender.ftpservice; import java.io.file; import java.util.arraylist; import java.util.list; import javax.ejb.local; import org.apache.ftpserver.ftpserver; import org.apache.ftpserver.ftpserverfactory; import org.apache.ftpserver.ftplet.authority; import org.apache.ftpserver.ftplet.ftpexception; import org.apache.ftpserver.ftplet.usermanager; import org.apache.ftpserver.listener.listenerfactory; import org.apache.ftpserver.usermanager.propertiesusermanagerfactory; import org.apache.ftpserver.usermanager.saltedpasswordencryptor; import org.apache.ftpserver.usermanager.impl.baseuser; import org.apache.ftpserver.usermanager.impl.writepermission; import org.jboss.ejb3.annotation.service; /** * session bean implementation class ftpserverservicelocal */ @service @local(ftpserverservicelocal.class) public class ftpserverservice implements ftpserverservicelocal { private ftpserver server = null; @override public void create() throws exception { ftpserverfactory serverfactory = new ftpserverfactory(); listenerfactory factory = new listenerfactory(); // set port of listener factory.setport(2221); // replace default listener serverfactory.addlistener("default", factory.createlistener()); // create new user serverfactory.setusermanager(adduser("jboss", "azerty", "c:/tools")); // start server server = serverfactory.createserver(); } @override public void start() throws exception { try { server.start(); } catch (ftpexception e) { e.printstacktrace(); } } public void restart() throws exception { try { server.stop(); server.start(); } catch (ftpexception e) { e.printstacktrace(); } } @override public void stop() { try { server.stop(); } catch (exception e) { e.printstacktrace(); } } @override public void destroy() { stop(); server = null; } public usermanager adduser(final string username, final string password, final string ftproot) { propertiesusermanagerfactory usermanagerfactory = new propertiesusermanagerfactory(); usermanagerfactory.setfile(new file("c:/jbossusers.properties")); usermanagerfactory.setpasswordencryptor(new saltedpasswordencryptor()); usermanager um = usermanagerfactory.createusermanager(); baseuser user = new baseuser(); user.setname(username); user.setpassword(password); user.sethomedirectory(ftproot); list<authority> authorities = new arraylist<authority>(); authorities.add(new writepermission()); user.setauthorities(authorities); try { um.save(user); } catch (ftpexception e) { e.printstacktrace(); } return um; } } and simple client:
package client; import java.io.file; import java.io.fileinputstream; import java.io.ioexception; import java.io.inputstream; import java.net.socketexception; import java.util.properties; import javax.naming.initialcontext; import javax.naming.namingexception; import org.apache.commons.net.ftp.ftpclient; import org.apache.commons.net.ftp.ftpfile; import com.cs3drender.session.rendersessionremote; public class client { public static void main(string[] args) { /* initial context. default settings in file * jndi.properties used. * can explicitly set properties instead of using file. */ properties properties = new properties(); properties.put("java.naming.factory.initial","org.jnp.interfaces.namingcontextfactory"); properties.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces"); properties.put("java.naming.provider.url","localhost"); try { initialcontext context= new initialcontext(properties); rendersessionremote beanremote=(rendersessionremote)context.lookup("rendersession/remote"); //system.out.println(beanremote.render("test")); try { ftpclient ftp = new ftpclient(); ftp.connect("localhost", 2221); ftp.login("jboss", "azerty"); //ftp.enterlocalpassivemode(); //ftp.enterremotepassivemode(); ftp.setautodetectutf8(true); string filename = "bug sheep 2.png"; ftp.storefile(filename, new fileinputstream("c:/"+filename)); ftp.logout(); ftp.disconnect(); } catch (socketexception e) { // todo auto-generated catch block e.printstacktrace(); } catch (ioexception e) { // todo auto-generated catch block e.printstacktrace(); } }catch(namingexception e){ e.printstacktrace(); } } } i don't realy understand why transfert data size wrong.
also trace log of server contains no error.
11:52:28,548 info [org.apache.ftpserver.listener.nio.ftploggingfilter] created 11:52:28,549 info [org.apache.ftpserver.listener.nio.ftploggingfilter] opened 11:52:28,550 info [org.apache.ftpserver.listener.nio.ftploggingfilter] sent: 220 service ready new user.
11:52:28,552 info [org.apache.ftpserver.listener.nio.ftploggingfilter] received: user jboss 11:52:28,553 info [org.apache.ftpserver.listener.nio.ftploggingfilter] sent: 331 user name okay, need password jboss.
11:52:28,553 info [org.apache.ftpserver.listener.nio.ftploggingfilter] received: pass * 11:52:28,561 info [org.apache.ftpserver.command.impl.pass] login success - jboss 11:52:28,561 info [org.apache.ftpserver.listener.nio.ftploggingfilter] sent: 230 user logged in, proceed.
11:52:28,562 info [org.apache.ftpserver.listener.nio.ftploggingfilter] received: port 127,0,0,1,12,190 11:52:28,563 info [org.apache.ftpserver.listener.nio.ftploggingfilter] sent: 200 command port okay.
11:52:28,563 info [org.apache.ftpserver.listener.nio.ftploggingfilter] received: stor bug sheep 2.png 11:52:28,705 info [org.apache.ftpserver.command.impl.stor] file uploaded /bug sheep 2.png 11:52:28,706 info [org.apache.ftpserver.listener.nio.ftploggingfilter] sent: 150 file status okay; open data connection.
11:52:28,706 info [org.apache.ftpserver.listener.nio.ftploggingfilter] sent: 226 transfer complete.
thanks help
i found solution. have set transfer type manually binary mode.
ftp.setfiletype(ftp.binary_file_type);
Comments
Post a Comment