小编给大家分享一下mongodb存储图片的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家学习,希望大家阅读完这篇文章后大所收获,下面让我们一起去学习方法吧!

一、GridFS

GridFS将图片数据与图片属性数据分开保存,用chunks来保存图片数据,files保存属性数据,一个图片file可能对应多个chunks,每个chunk的内存大小固定(16M),若图片数据大于chunk,则分为多个chunk保存,用同一个ObjectID关联,下载时自动将多个chunk合并为图片数据。

上传

frompymongoimportMongoClientfromgridfsimport*importrequestsclient=MongoClient('127.0.0.1',27017)#连接mongodbdb=client.photo#连接对应数据库#db.authenticate("username","passowd")fs=GridFS(db,collection="images")#连接collectiondata=requests.get(dic["photo_url"],timeout=10).content#确认数据库中不存在此图片之后再保存ifnotfs.find_one({"photo_url":dic["photo_url"]}):fs.put(data,**dic)#上传成功后,photo数据库下出现两个collection,分别为:images.files,images.chunks12345678910111213

下载

frompymongoimportMongoClientfromgridfsimport*client=MongoClient('127.0.0.1',27017)#连接mongodbdb=client.photo#连接对应数据库#db.authenticate("username","passowd")fs=GridFS(db,collection="images")#连接collectionnum=1forgrid_outinfs.find(no_cursor_timeout=True):data=grid_out.read()#获取图片数据outf=open('/home/%d.jpg'%num,'wb')outf.write(data)#存储图片outf.close()ifnum%100000==0metadata_file=open("/home/metadata%d.csv"%(num/100000+1),"ab")csv_writer=csv.writer(metadata_file,delimiter='\t')row=[grid_out.photo_title.encode('utf-8'),grid_out.uploadDate,grid_out.upload_date,\grid_out.longitude,grid_out.latitude,grid_out.width,grid_out.height,\grid_out.owner_name.encode('utf-8'),grid_out.photo_id,grid_out._id,grid_out.photo_url]csv_writer.writerow(row)12345678910111213141516171819

二、bson二进制

这种方法将图片数据作为键值对放入字典与属性数据作为整体存入数据库中。

上传代码如下:

frombsonimportbinaryfrompymongoimportMongoClientclient=MongoClient('127.0.0.1',27017)#连接mongodbdb=client.photo#连接对应数据库image_collection=db.imagesdata=requests.get(dic["photo_url"],timeout=10).content#确认数据库中不存在此图片之后再保存ifnotimage_collection.find_one({"photo_url":dic["photo_url"]})dic["imagecontent"]=binary.Binary(data)image_collection.insert(dic)1234567891011

以上是mongodb存储图片的方法的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!