重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
创新互联www.cdcxhl.cn八线动态BGP香港云服务器提供商,新人活动买多久送多久,划算不套路!
创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的古浪网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!小编给大家分享一下mongodb存储图片的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家学习,希望大家阅读完这篇文章后大所收获,下面让我们一起去学习方法吧!
一、GridFS
GridFS将图片数据与图片属性数据分开保存,用chunks来保存图片数据,files保存属性数据,一个图片file可能对应多个chunks,每个chunk的内存大小固定(16M),若图片数据大于chunk,则分为多个chunk保存,用同一个ObjectID关联,下载时自动将多个chunk合并为图片数据。
上传
from pymongo import MongoClient from gridfs import * import requests client = MongoClient('127.0.0.1', 27017) #连接mongodb db = client.photo #连接对应数据库 #db.authenticate("username","passowd") fs = GridFS(db, collection="images") #连接collection data = requests.get(dic["photo_url"], timeout=10).content # 确认数据库中不存在此图片之后再保存 if not fs.find_one({"photo_url":dic["photo_url"]}): fs.put(data, **dic) # 上传成功后,photo数据库下出现两个collection,分别为: images.files, images.chunks12345678910111213
下载
from pymongo import MongoClient from gridfs import * client = MongoClient('127.0.0.1', 27017) #连接mongodb db = client.photo #连接对应数据库 #db.authenticate("username","passowd") fs = GridFS(db, collection="images") #连接collection num = 1 for grid_out in fs.find(no_cursor_timeout=True): data = grid_out.read() # 获取图片数据 outf = open('/home/%d.jpg'%num,'wb') outf.write(data) #存储图片 outf.close() if num%100000 == 0 metadata_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二进制
这种方法将图片数据作为键值对放入字典与属性数据作为整体存入数据库中。
上传代码如下:
from bson import binary from pymongo import MongoClient client = MongoClient('127.0.0.1', 27017) #连接mongodb db = client.photo #连接对应数据库 image_collection = db.images data = requests.get(dic["photo_url"], timeout=10).content # 确认数据库中不存在此图片之后再保存 if not image_collection.find_one({"photo_url":dic["photo_url"]}) dic["imagecontent"] = binary.Binary(data) image_collection.insert(dic)1234567891011
以上是mongodb存储图片的方法的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联-成都网站建设公司行业资讯频道!