代码之家  ›  专栏  ›  技术社区  ›  user405398

如何使用java在mongoDB中插入图片?

  •  41
  • user405398  · 技术社区  · 15 年前

    我想在MongoDB中存储图像文档。我在用java。

    任何链接或建议将不胜感激。

    3 回复  |  直到 7 年前
        1
  •  43
  •   Gilles 'SO- stop being evil'    14 年前

    用于存储二进制数据,如可以使用的图像 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();
        }
    }
    
        2
  •  5
  •   Scott Hernandez    15 年前

    对于小的(<1mb)图像,我建议将它们存储在二进制字段(java中为byte[])中;如果您有较大的文件,GridFS会更好地工作。

    我直接使用一个简单的二进制字段在文档中存储了很多缩略图。

    我使用Morphia(http://code.google.com/p/Morphia)来存储我的pojo。

        3
  •  2
  •   theTuxRacer Rose Perrone    15 年前

    嗯,阿飞,你不能在mongodb中存储图像 ,可以存储到图像的链接。我并没有说的那么高,如果图像很小,比如100x100px,你可以尝试将图像存储为二进制,然后进行改革和动态图像。但是,渲染图像需要一些时间,因此我建议您保存链接,只需获取该图像并动态填充它。

    您可以使用GridFS来存储较大的二进制对象。

    既然您是mongoDB新手,请看一下:

    Link 1

    Link 2

    Mongo+JAVA Tutorial

    GridFS specs

    你也可以一直这样问,我也是mongoDB新手,不介意帮一个新手:D