2013-12-17 80 views
0

我使用mule和jersey從ftp服務器上下載文件,下載小文件沒問題,大於100M的文件會在ftp服務器上出現錯誤,而不是再次下載,我寫了一個澤西網站項目並運行tomcate ,可以下載600M大文件。 FTP服務器的錯誤是:mule jersey下載大文件

java.net.SocketException: Broken pipe 
     at java.net.SocketOutputStream.socketWrite0(Native Method) 
     at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) 
     at java.net.SocketOutputStream.write(SocketOutputStream.java:136) 
     at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65) 
     at java.io.BufferedOutputStream.write(BufferedOutputStream.java:78) 
     at org.apache.ftpserver.impl.IODataConnection.transfer(IODataConnection.java:268) 
     at org.apache.ftpserver.impl.IODataConnection.transferToClient(IODataConnection.java:161) 
     at org.apache.ftpserver.command.impl.RETR.execute(RETR.java:166) 
     at org.apache.ftpserver.impl.DefaultFtpHandler.messageReceived(DefaultFtpHandler.java:210) 
     at org.apache.ftpserver.listener.nio.FtpHandlerAdapter.messageReceived(FtpHandlerAdapter.java:61) 
     at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:716) 
     at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434) 
     at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46) 
     at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:796) 
     at org.apache.ftpserver.listener.nio.FtpLoggingFilter.messageReceived(FtpLoggingFilter.java:85) 
     at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434) 
     at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46) 
     at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:796) 
     at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:75) 
     at org.apache.mina.filter.logging.MdcInjectionFilter.filter(MdcInjectionFilter.java:136) 
     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:46) 
     at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:796) 
     at org.apache.mina.filter.codec.ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(ProtocolCodecFilter.java:427) 
     at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:245) 
     at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434) 
     at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46) 
     at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:796) 
     at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:75) 
     at org.apache.mina.core.session.IoEvent.run(IoEvent.java:63) 
     at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(OrderedThreadPoolExecutor.java:780) 
     at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(OrderedThreadPoolExecutor.java:772) 
     at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThreadPoolExecutor.java:714) 
     at java.lang.Thread.run(Thread.java:662) 

下載球衣代碼

InputStream inputStream = ftpTransferUtil.download(ftpClient.getClient(), ftpFilePath); 
FormDataBodyPart fdbp = new FormDataBodyPart("payload",inputStream, MediaType.APPLICATION_OCTET_STREAM_TYPE); 
FormDataMultiPart formDataMultiPart = new FormDataMultiPart(); 
formDataMultiPart.bodyPart(fdbp); 
formDataMultiPart.field("app_id", appId); 
//formDataMultiPart.field("file_size", file.length() + ""); 
formDataMultiPart.field("version", version); 
formDataMultiPart.field("postfix", postfix); 
formDataMultiPart.field("file_name", ftpFileName); 
// 返回FormDataMultiPart對象 
response = javax.ws.rs.core.Response.ok(formDataMultiPart).build(); 

騾子球衣配置

<jersey:resources doc:name="REST Service"> 
     <component> 
      <spring-object bean="fileTransferRest" /> 
     </component> 
</jersey:resources> 

回答

1

有沒有在堆棧跟蹤一個騾子類:它看起來像問題來自Apache FTP庫。你可以配置ftpTransferUtil更長的暫停嗎?

+0

我試過了更長的超時時間,我覺得問題在於騾,可能是騾控制返回inputstream特殊。我寫了一個使用相同代碼球衣的web項目,只是不同的是不使用mule,它可以在ftp服務器下載大文件並且沒有錯誤。 – user3109897