画像をMongoDBで保存する(qbit)


環境
Windows 10
MongoDB 4.2
Python  3.8
pymongo 3.10.1

bson(小画像)
  • bsonは、16 MB未満の小さなファイル
  • を格納するために使用される.
  • Pythonサンプルコード
  • #encoding: utf-8
    #author: qbit
    #date: 2020-05-20
    #summary:   MongoDB   、     
    
    import pymongo
    from bson import binary
    def img2mongo(coll: pymongo.collection.Collection, 
                imgId: str,
                imgBuf: bytes):
        r"""
        coll: MongoDB   
        imgId:   ID
        imgBuf:        Buffer
        """
        print('img2mongo ...')
        bin = binary.Binary(imgBuf)
        return coll.insert_one({'_id': imgId, 'img_bin': imgBuf})    
    
    def mongo2img(coll: pymongo.collection.Collection, 
                imgId: str):
        r"""
        coll: MongoDB   
        imgId:   ID
          :         
        """
        print('mongo2img ...')
        dic = coll.find_one({'_id': imgId})
        return dic['img_bin']
    if __name__ == "__main__":
        username = 'xxx'
        password = 'xxx'
        host = '192.168.1.72'
        port = 27017
        dbname = 'student'
        connStr = f'mongodb://{username}:{password}@{host}:{port}/{dbname}?authSource=admin'
        db = pymongo.MongoClient(connStr).get_database()
        coll = db.img
        coll.drop()
        with open('520_in.jpg', mode='rb') as f:
            inBuf = f.read()
        img2mongo(coll, '520', inBuf)
        outBuf = mongo2img(coll, '520')
        with open('520_out.jpg', mode='wb') as f:
            f.write(outBuf)

    GridFS(大画像)
  • GridFS 16 MBより大きいファイル
  • を格納するために使用される.
    本文は
    qbit snap