您好,登錄后才能下訂單哦!
小編給大家分享一下mongodb存圖片的方法,相信大部分人都還不怎么了解,因此分享這邊文章給大家學習,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去學習方法吧!
利用mongodb保存圖片通常有兩種方法,一種是將圖片數據轉化為二進制作為字典的鍵值對進行保存,另一種是利用mongodb提供的
GridFS進行保存,兩者各有利弊。性能方面的優劣未曾測試,無法進行評價,此處僅對兩種方式進行介紹,若有徹知者還望指教。
下面以如下數據作為示例進行介紹:
數據示例
dic = { "owner_name" : "samssmilin", "photo_id" : "602880671", "tags" : "", "longitude" : "-121.106479", "height" : "766", "datetaken" : "2004-01-17 21:05:35", "width" : "1024", "length" : 38141, "photo_title" : "Dad and Elijah", "latitude" : "35.565222", "photo_url" : "https://farm2.staticflickr.com/1063/602880671_c2f4511ef4_b.jpg", "dateupload" : "1075355967", "owner_id" : "45365637@N00" }
一、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存圖片的方法的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。