Как изменить размер фрагмента и получить определенный фрагмент в MongoDB Gridfs?

Я новичок в Mongodb, теперь я хочу вставить pdf-файл размером 3 МБ с помощью драйвера JAVA и изменить размер фрагмента с 256 на 1 МБ, а затем получить второй фрагмент, скажем, 2-ю страницу PDF-документа. Как я могу это сделать. Спасибо.


person Community    schedule 20.02.2014    source источник


Ответы (1)


Как правило, после того как документ был записан в GridFS, вам потребуется переписать его (удалить и снова сохранить), чтобы изменить размер фрагмента.

Поскольку GridFS ничего не знает о формате данных в файле, она не может помочь вам перейти на «2-ю страницу». Реализация InputStream, возвращаемая из GridFSDBFile, избегает чтения блоков при использовании метода skip(long). Если вы знаете, что «2-я страница» занимает N байтов в файле, вы можете пропустить это количество байтов в потоке и начать чтение.

ХТХ, Роб

P.S. Помните, что skip(long) возвращает количество фактически пропущенных байтов. Вы не должны предполагать, что skip(12) всегда пропускает 12 байт.

P.P.S. Начать чтение с середины PDF-файла и понять, что там есть, будет сложно, если вы не сохранили состояние с предыдущей страницы (страниц).

person Rob Moore    schedule 21.02.2014
comment
Спасибо за функцию Skip(), но как мы можем изменить размер фрагмента, скажем, я изменил размер фрагмента перед сохранением с помощью gfsinputfile.setChunkSize(значения в байтах), но я заметил, что размер выходного фрагмента всегда показывает 262144, как я могу с этим справиться. - person ; 21.02.2014
comment
Вы пытались использовать вариант сохранения (длинный) вместо установки размера фрагмента и последующего вызова save ()? Если вы используете GridFSInputFile.getOutpuStream(), вам нужно убедиться, что setChunkSize(...) вызывается до getOutputStream(). В противном случае setChunkSize(...) не работает. - person Rob Moore; 22.02.2014