Как вставить изображения в mongoDB с помощью java?

Я хочу хранить документы изображений в MongoDB. Я использую java.

Любые ссылки или предложения будут оценены.


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


Ответы (3)


Для хранения двоичных данных, таких как изображения, вы можете использовать GridFS или реализовать собственную реализацию; Загрузите драйвер и посмотрите на src/test/com/mongodb/gridfs/GridFSTest.java ;)

Редактировать: вам повезло сегодня! Я сделал для вас полный код;) Наслаждайтесь!

package mongodb.testing.java;
import com.mongodb.*;
import com.mongodb.gridfs.*;
import java.io.*;

public class Main {

    public static byte[] LoadImage(String filePath) throws Exception {
        File file = new File(filePath);
        int size = (int)file.length();
        byte[] buffer = new byte[size];
        FileInputStream in = new FileInputStream(file);
        in.read(buffer);
        in.close();
        return buffer;
    }

    public static void main(String[] args) throws Exception {
        //Load our image
        byte[] imageBytes = LoadImage("C:/Temp/bear.bmp");
        //Connect to database
        Mongo mongo = new Mongo( "127.0.0.1" );
        String dbName = "GridFSTestJava";
        DB db = mongo.getDB( dbName );
        //Create GridFS object
        GridFS fs = new GridFS( db );
        //Save image into database
        GridFSInputFile in = fs.createFile( imageBytes );
        in.save();

        //Find saved image
        GridFSDBFile out = fs.findOne( new BasicDBObject( "_id" , in.getId() ) );

        //Save loaded image from database into new image file
        FileOutputStream outputImage = new FileOutputStream("C:/Temp/bearCopy.bmp");
        out.writeTo( outputImage );
        outputImage.close();
    }
}
person Edward83    schedule 22.11.2010
comment
спасибо за ваш код. Я также сделал код для того же процесса. Но твой проще моего!!! - person ; 23.11.2010
comment
Итак, чтобы записать в html-файл, вы бы вывели местоположение изображения на сервере в HTML? - person Jeff; 15.06.2013
comment
Большое спасибо, особенно за метод 'LoadImage'. - person Danilo Radenovic; 30.12.2013
comment
Спасибо :) действительно полезно - person Hamed Minaee; 19.01.2015
comment
это будет работать для файлов меньше размера int. Больше, чем это, нужно будет использовать куски и сохранять по частям. - person tgkprog; 30.10.2019

Для небольших (‹1 МБ) изображений я бы предложил хранить их в двоичном поле (byte[] в java); если у вас есть файлы большего размера, GridFS будет работать лучше.

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

Я использую Morphia (http://code.google.com/p/morphia) для хранения своих POJO.

person Scott Hernandez    schedule 22.11.2010
comment
Я собираюсь хранить много изображений в монго. И миниатюры, и обычный размер. Является ли pojo необходимым для меня??!!! - person ; 23.11.2010
comment
Можете ли вы сказать мне, как вы представляете изображения в монго. например, { x:1, y:2 } как вы представляете изображения???? - person ; 23.11.2010
comment
Как вы храните свои изображения? Все в одном документе? или отдельные документы в одной коллекции? или Скажите, если я хочу сохранить несколько изображений в документе, который выглядит как { "name" : "Tamil", "age" : 23, "Images"{"image1" : 123.jpg, "image2": abc.jpg}}, как мне это сделать с помощью java - person ; 23.11.2010

Ну, насколько я знаю, вы не можете хранить изображения в mongodb, вы можете хранить ссылки на изображения. И я не под кайфом, когда говорю это, если изображения маленькие, например, 100x100 пикселей, вы можете попробовать сохранить изображение в двоичном формате и преобразовать изображение на лету. Но рендеринг изображений займет некоторое время, поэтому я предлагаю вам сохранить ссылку, просто получить это изображение и заполнить его динамически.

Вы можете использовать GridFS для хранения больших двоичных объектов.

Поскольку вы новичок в mongoDB, взгляните на:

Ссылка 1

Ссылка 2

Учебное пособие по Mongo+JAVA

спецификации GridFS

Вы также всегда можете спросить на SO, я тоже новичок в mongoDB и не против помочь новичку: D

person theTuxRacer    schedule 22.11.2010
comment
Как связать файл GridFS с простым документом в mongodb. Скажем, я загружаю большое изображение и сохраняю его в GridFS. Я сохраняю другие детали файла в документе в любой коллекции. Как я могу получить связанное изображение, когда я читаю документ из коллекции??? - person ; 26.11.2010
comment
я не знаю, есть ли какой-либо метод API для этого, вы создаете связь между ними, создавая поле в обеих коллекциях с одинаковыми значениями. Поэтому, когда вы сталкиваетесь со значением в первой коллекции, вы просто запрашиваете коллекцию изображений со значением и находите соответствующее изображение. - person theTuxRacer; 26.11.2010