Как вставить изображения в MongoDB с помощью Java? - PullRequest
41 голосов
/ 22 ноября 2010

Я хочу хранить графические документы в MongoDB.Я использую Java.

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

Ответы [ 3 ]

43 голосов
/ 22 ноября 2010

Для хранения двоичных данных, таких как изображения, вы можете использовать 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();
    }
}
5 голосов
/ 22 ноября 2010

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

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

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

2 голосов
/ 22 ноября 2010

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

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

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

Ссылка 1

Ссылка 2

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

Характеристики GridFS

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

...