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
>

Reply via email to