ネッティーでファイルをサービング - レスポンスは1バイトで切り捨てられます

StackOverflow https://stackoverflow.com/questions/8826529

質問

私はネッティーサーバ(画像、HTML)を経由してAndroidの資産からファイルを提供しました。 テキストは、このようなHTMLが無効に圧縮.MP3として保存されるファイル(私はInputStreamを必要とする!)

私のパイプラインは次のように探しています:

    pipeline.addLast("decoder", new HttpRequestDecoder());
    pipeline.addLast("aggregator", new HttpChunkAggregator(65536));
    pipeline.addLast("encoder", new HttpResponseEncoder());
    pipeline.addLast("chunkedWriter", new ChunkedWriteHandler());

    pipeline.addLast("handler", new AssetsServerHandler(context));

私のハンドラがあります:

public class AssetsServerHandler extends SimpleChannelUpstreamHandler {

    public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {

        // some checks

        final FileInputStream is;
        final AssetFileDescriptor afd;
        try {
            afd = assetManager.openFd(path);
            is = afd.createInputStream();   
        } catch(IOException exc) {
            sendError(ctx, NOT_FOUND);
            return;
        }

        final long fileLength = afd.getLength();

        HttpResponse response = new DefaultHttpResponse(HTTP_1_1, OK);
        setContentLength(response, fileLength);

        final Channel ch = e.getChannel();
        final ChannelFuture future;
        ch.write(response);
        future = ch.write(new ChunkedStream(is));
        future.addListener(new ChannelFutureListener() {
            @Override
            public void operationComplete(ChannelFuture future) throws Exception {
                future.getChannel().close();
            }
        });
        if (!isKeepAlive(request)) {
            future.addListener(ChannelFutureListener.CLOSE);
        }
    }
    // other stuff
}
私は、少なくとも1バイトで切り捨てられた私のresposesを持っているハンドラでは、

。私はChunkedStreamChunkedNioFileを変更した場合(およびそれにコンストラクタとしてis.getChannel()の代わりisを使用) - すべてが完璧に動作します。

は、ヘルプは私がChunkedStreamと間違っているかを理解してください。

役に立ちましたか?

解決

あなたのコードは、右の私には見えます。 AssetFileDescriptorの返さFileInputStreamのは、「すべてのバイトを」含まれていますか?あなたはユニットテストでこれを確認することができます。何もそれにバグネッティーでそのAバグが存在しない場合。私はChunkInputStreamを多用すると、まだ、このような問題を抱えていたことはありませんが、多分それは本当にInputStreamの性質に依存します。

あなたはテストケースを書いて、網状のgithubのに問題を開くことができればいいだろう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top