2016-03-22 5 views
1

У меня есть файл для хранения в mongoDB. Я хочу, чтобы не загружать весь файл (размер которого может быть несколько МБ), вместо этого я хочу открыть поток и перенаправить его в mongoDB, чтобы сохранить выполнение операции записи. Я не помню, как хранить содержимое в байт-кодированном base64 [].Запись потока в mongoDB в Java

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

В настоящее время я использую hibernate-ogm с сервером Vertx, но я открыт для переключения на другой api, если он эффективно защищает дело.

Я хочу фактически сохранить документ с несколькими полями и несколькими вложениями.

ответ

2

Вы можете использовать GridFS. Особенно, когда вам нужно хранить большие файлы (> 16MB) это рекомендуемый метод:

File f = new File("sample.zip"); 
GridFS gfs = new GridFS(db, "zips"); 
GridFSInputFile gfsFile = gfs.createFile(f); 
gfsFile.setFilename(f.getName()); 
gfsFile.setId(id); 
gfsFile.save(); 

Или в случае, если у вас есть InputStream in:

GridFS gfs = new GridFS(db, "zips"); 
GridFSInputFile gfsFile = gfs.createFile(in); 
gfsFile.setFilename("sample.zip"); 
gfsFile.setId(id); 
gfsFile.save(); 

Вы можете загрузить файл с помощью одного из GridFS.find методы:

GridFSDBFile gfsFile = gfs.findOne(id); 
InputStream in = gfsFile.getInputStream(); 
+0

Благодарим за отзыв. Может ли этот подход также использоваться для документов размером менее 16 МБ? Я не ожидаю ничего более 8 МБ для моего варианта использования. –

+1

Несомненно, он может использоваться для файлов любого размера. – Sebastian

+0

Спасибо, извините за непрерывное прослушивание. Вероятно, я был неясно в моем вопросе, но у меня есть еще несколько полей в моем документе, а также файл вложения. Можно ли иметь другие поля в одном документе? как имя, тема и т. д. –