0

私はnetty 3.5.0を使用しており、アップロードの例を実装しHttpUploadServerましHttpUploadServerHandlerHttpUploaderServerPipeLineFactory.

にはHttpUploadServerHandler、コメント アウトされた行がいくつかあります。

// fileUpload.isInMemory();// tells if the file is in Memory
// or on File
// fileUpload.renameTo(dest); // enable to move into another
// File dest
// decoder.removeFileUploadFromClean(fileUpload); //remove
// the File of to delete file

これらの行、特にrenameTo(dest).

余談:removeFileUploadFromClean解決していないようです

何が起こっているのか、または修正方法を教えてもらえますか?

大きなファイルを転送して、一時的な場所から最終的な宛先に移動できるようにしたいと考えています。を使用しない場合renameTo、一時的な場所への転送は完全に良好であるように見えますが、ファイルはクリーンアップのためにすぐに削除されます。

HttpUploadServerHandler::messageReceived
HttpUploadServerHandler::messageReceived
HttpUploadServerHandler::messageReceived
HttpUploadServerHandler::messageReceived
renaming fileoxygen.exe
fileUpload.getFilename() oxygen.exe
fileUpload.getName() myfile
java.io.IOException: Map failed
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:748)
at sun.nio.ch.FileChannelImpl.transferToTrustedChannel(FileChannelImpl.java:437)
at sun.nio.ch.FileChannelImpl.transferTo(FileChannelImpl.java:510)
at org.jboss.netty.handler.codec.http.multipart.AbstractDiskHttpData.renameTo(AbstractDiskHttpData.java:292)
at org.jboss.netty.handler.codec.http.multipart.MixedFileUpload.renameTo(MixedFileUpload.java:117)
at com.vayyoo.vaf.nettyapp.upload.HttpUploadServerHandler.writeHttpData(HttpUploadServerHandler.java:317)
at com.vayyoo.vaf.nettyapp.upload.HttpUploadServerHandler.readHttpDataChunkByChunk(HttpUploadServerHandler.java:253)
at com.vayyoo.vaf.nettyapp.upload.HttpUploadServerHandler.messageReceived(HttpUploadServerHandler.java:208)
at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:75)
at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:563)
at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
at org.jboss.netty.handler.codec.http.HttpContentEncoder.messageReceived(HttpContentEncoder.java:67)
at org.jboss.netty.channel.SimpleChannelHandler.handleUpstream(SimpleChannelHandler.java:95)
at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:563)
at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296)
at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:359)
at org.jboss.netty.handler.codec.replay.ReplayingDecoder.callDecode(ReplayingDecoder.java:568)
at org.jboss.netty.handler.codec.replay.ReplayingDecoder.messageReceived(ReplayingDecoder.java:437)
at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:75)
at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:563)
at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:558)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255)
at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:91)
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.processSelectedKeys(AbstractNioWorker.java:373)
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:247)
at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:35)
at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:102)
at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.OutOfMemoryError: Map failed
at sun.nio.ch.FileChannelImpl.map0(Native Method)
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:745)
renamed file to c:\temp\oxygen.exe
HttpUploadServerHandler::messageReceived
renaming fileoxygen.exe
fileUpload.getFilename() oxygen.exe
fileUpload.getName() myfile
... 32 more
java.io.IOException: Map failed
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:748)
at sun.nio.ch.FileChannelImpl.transferToTrustedChannel(FileChannelImpl.java:437)
at sun.nio.ch.FileChannelImpl.transferTo(FileChannelImpl.java:510)
at org.jboss.netty.handler.codec.http.multipart.AbstractDiskHttpData.renameTo(AbstractDiskHttpData.java:292)
at org.jboss.netty.handler.codec.http.multipart.MixedFileUpload.renameTo(MixedFileUpload.java:117)
at com.vayyoo.vaf.nettyapp.upload.HttpUploadServerHandler.writeHttpData(HttpUploadServerHandler.java:317)
at com.vayyoo.vaf.nettyapp.upload.HttpUploadServerHandler.readHttpDataAllReceive(HttpUploadServerHandler.java:236)
at com.vayyoo.vaf.nettyapp.upload.HttpUploadServerHandler.messageReceived(HttpUploadServerHandler.java:211)
at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:75)
at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:563)
at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
at org.jboss.netty.handler.codec.http.HttpContentEncoder.messageReceived(HttpContentEncoder.java:67)
at org.jboss.netty.channel.SimpleChannelHandler.handleUpstream(SimpleChannelHandler.java:95)
at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:563)
at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296)
at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:359)
at org.jboss.netty.handler.codec.replay.ReplayingDecoder.callDecode(ReplayingDecoder.java:568)
at org.jboss.netty.handler.codec.replay.ReplayingDecoder.messageReceived(ReplayingDecoder.java:437)
at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:75)
at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:563)
at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:558)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255)
at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:91)
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.processSelectedKeys(AbstractNioWorker.java:373)
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:247)
at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:35)
at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:102)
at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.OutOfMemoryError: Map failed
at sun.nio.ch.FileChannelImpl.map0(Native Method)
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:745)
... 32 more
renamed file to c:\temp\oxygen.exe
HttpUploadServerHandler::messageReceived
4

2 に答える 2

0

あなたが提示した問題は、バージョン 3.5.1.Final で修正されます。

于 2012-06-15T14:39:37.460 に答える
0

私には、宛先がrenameTo()一時ファイルと同じファイルシステムに属していないように見えます。したがって、ファイルを移動しようとすると失敗し、ファイルが移動renameTo()先にコピーされ、一時ファイルが削除されます。ただし、renameTo()ファイルのコピー操作を奇妙な方法で実装したようです。(すなわちバグ)。バグが修正されるまで、次のことができます。

  1. 一時ファイルのディレクトリと同じパーティションに属する宛先を指定するか、または
  2. 一時ファイルのパスを取得し、自分でコピー操作を実装します。

この問題はこちらで追跡できます: https://github.com/netty/netty/issues/398

于 2012-06-15T02:05:25.143 に答える