HTTP ZIP-Streaming с использованием ChunkedInput - PullRequest
0 голосов
/ 13 декабря 2011

Я портировал потоковый сервер NIO на HTTP, используя Netty.Он поддерживает загрузку zip-архивов, сгенерированных по запросу на сервер.После некоторых исследований и создания прототипов я реализовал собственную реализацию ChunkedInput для реализации этой функции.

Во время каждого вызова nextChunk я читаю несколько байтов текущего файла, архивирую его и записываю в ChannelBuffer, который затем возвращается.Это повторяется, пока есть данные и файлы для обработки (isEndOfInput возвращает false так долго).

Проблема в том, что переданный архив не может быть открыт.Сообщение об ошибке говорит мне, что некоторые байты отсутствуют.

Я на 100% уверен, что отправляю все данные, потому что я считаю общее количество сгенерированных байтов, возвращенных через ChannelBuffers.Эта сумма отличается от загруженного архива именно тем количеством пропущенных байтов.Для целей отладки в каждой итерации nextChunk я читаю фактическое содержимое ChannelBuffers и записываю его в FileOutputStream.Записанный файл является действительным архивом и может быть открыт, поэтому в архиве не может быть ошибки.

Есть ли какие-то особенности, реализующие пользовательский ChunkedInput в сочетании с ChunkedWriteHandler, или я что-то упустил?

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Вам необходимо использовать новый ChannelBuffer для каждого чанка, так как ChannelBuffer ставится в очередь для записи.Если вы повторно используете тот же ChannelBuffer, вы можете повредить содержимое.

0 голосов
/ 14 декабря 2011

Я посмотрел на реализацию ChunkedFile и заметил, что в nextChunk всегда новый ChannelBuffer возвращается с помощью ChannelBuffers.wrappedBuffer (bytes). В моей реализации ChunkedInput я использую один ChannelBuffer, который обновляется в nextChunk, а затем возвращается, поэтому я не создаю новый ChannelBuffer во время каждого вызова nextChunk. Я изменил свой метод nextChunk, чтобы он возвращал новый ChannelBuffer при каждом вызове, и теперь он работает.

...