Hi You need to send the 150 before starting the transfer (it's what triggers the client to prepare for the transfer. After the transfer, you also need to send a 226 to show that the command is complete.
/niklas On Sat, Mar 7, 2009 at 7:04 PM, Edward Scanzano <[email protected]> wrote: > > Hi, > > I have this code > > public FtpletResult onUploadStart(FtpSession session, FtpRequest request) > throws FtpException, IOException { > ByteArrayOutputStream bos = null; > > try { > bos = new ByteArrayOutputStream(); > DataConnectionFactory dcf = session.getDataConnection(); > DataConnection dc = dcf.openConnection(); > dc.transferFromClient(session, bos); > > session.write(new DefaultFtpReply(150, "Data transfer complete.")); > } catch (Exception ex) { > ex.printStackTrace(); > } finally { > session.getDataConnection().closeDataConnection(); > if (bos != null) bos.close(); > } > > return FtpletResult.SKIP; > } > > and the line dc.transferFromClient(session, bos) is throwing this exception > > java.net.SocketException: Connection reset > at java.net.SocketInputStream.read(SocketInputStream.java:168) > at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) > at java.io.BufferedInputStream.read1(BufferedInputStream.java:256) > at java.io.BufferedInputStream.read(BufferedInputStream.java:313) > at java.io.FilterInputStream.read(FilterInputStream.java:90) > at > org.apache.ftpserver.impl.IODataConnection.transfer(IODataConnection.java:238) > at > org.apache.ftpserver.impl.IODataConnection.transferFromClient(IODataConnection.java:131) > at > com.cfm.common.metamodel.impl.es.CFMFTPLet.onUploadStart(CFMFTPLet.java:116) > at > com.cfm.common.metamodel.impl.es.CFMFTPLet.beforeCommand(CFMFTPLet.java:43) > at > org.apache.ftpserver.ftpletcontainer.impl.DefaultFtpletContainer.beforeCommand(DefaultFtpletContainer.java:163) > at > org.apache.ftpserver.impl.DefaultFtpHandler.messageReceived(DefaultFtpHandler.java:156) > at > org.apache.ftpserver.listener.nio.FtpHandlerAdapter.messageReceived(FtpHandlerAdapter.java:65) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:722) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:48) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:802) > at > org.apache.ftpserver.listener.nio.FtpLoggingFilter.messageReceived(FtpLoggingFilter.java:90) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:48) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:802) > at > org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:59) > at > org.apache.mina.filter.logging.MdcInjectionFilter.filter(MdcInjectionFilter.java:137) > at > org.apache.mina.filter.util.CommonEventFilter.messageReceived(CommonEventFilter.java:70) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:48) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:802) > at > org.apache.mina.filter.codec.ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(ProtocolCodecFilter.java:392) > at > org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:228) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:48) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:802) > at > org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:59) > at org.apache.mina.core.session.IoEvent.run(IoEvent.java:64) > at > org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(OrderedThreadPoolExecutor.java:552) > at > org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(OrderedThreadPoolExecutor.java:544) > at > org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThreadPoolExecutor.java:488) > at java.lang.Thread.run(Thread.java:595) > > At first it pauses for a while and then throws the exception above. > > I am trying to execute the put <filename> from the client. > > Any ideas what is causing this? > > Thanks >
