web-dev-qa-db-ja.com

Javaを使用してmongoDBに画像を挿入する方法

MongoDBに画像ドキュメントを保存したい。私はJavaを使用しています。

リンクや提案をいただければ幸いです。

41
user405398

画像のようなバイナリデータを格納するには、 GridFS を使用するか、独自の実装を実装します。 driver をダウンロードして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();
    }
}
43
Edward83

小さい(1mb未満)画像の場合は、バイナリフィールド(Javaではbyte [])に保存することをお勧めします。より大きなファイルがある場合、GridFSはより適切に機能します。

単純なバイナリフィールドを使用して、多くのサムネイルをドキュメントに直接保存しています。

Morphia(http://code.google.com/p/morphia)を使用してPOJOを保存します。

5
Scott Hernandez

まあ、私の知る限り、あなたはmongodbに画像を保存することはできません、画像へのリンクを保存できます。そして私が言うように私は高くありません、画像が100x100 pxのように小さい場合、Uはバイナリで画像を保存して、その場で画像を再構成して試すことができます。ただし、画像のレンダリングにはしばらく時間がかかるため、リンクを保存し、その画像をフェッチして動的に入力することをお勧めします。

GridFSを使用して、より大きなバイナリオブジェクトを格納できます。

MongoDBは初めてなので、以下をご覧ください。

リンク1

リンク2

Mongo + Javaチュートリアル

GridFS仕様

また、いつでもSOに質問することもできます。私もmongoDBを初めて使用するので、初心者の手助けをしてもかまいません:D

2
theTuxRacer