Python 操作GridFS
生活随笔
收集整理的這篇文章主要介紹了
Python 操作GridFS
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
import pymongo
from pymongo import MongoClient
from gridfs import GridFS
class GFS(object):
def __init__(self, file_db,file_table):
self.file_db = file_db
self.file_table = file_table
def createDB(self): #連接數(shù)據(jù)庫,并創(chuàng)建文件數(shù)據(jù)庫與數(shù)據(jù)表
client = MongoClient('localhost',27017)
db = client[self.file_db]
file_table = db[self.file_table]
return (db,file_table)
def insertFile(self,db,filePath,query): #將文件存入數(shù)據(jù)表
fs = GridFS(db,self.file_table)
if fs.exists(query):
print('已經(jīng)存在該文件')
else:
with open(filePath,'rb') as fileObj:
data = fileObj.read()
ObjectId = fs.put(data,filename = filePath.split('/')[-1])
print(ObjectId)
fileObj.close()
return ObjectId
def getID(self,db,query): #通過文件屬性獲取文件ID,ID為文件刪除、文件讀取做準備
fs=GridFS(db, self.file_table)
ObjectId=fs.find_one(query)._id
return ObjectId
def getFile(self,db,id): #獲取文件屬性,并讀出二進制數(shù)據(jù)至內(nèi)存
fs = GridFS(db, self.file_table)
gf=fs.get(id)
bdata=gf.read() #二進制數(shù)據(jù)
attri={} #文件屬性信息
attri['chunk_size']=gf.chunk_size
attri['length']=gf.length
attri["upload_date"] = gf.upload_date
attri["filename"] = gf.filename
attri['md5']=gf.md5
print(attri)
return (bdata, attri)
# def listFile(self,db): #列出所有文件名
# fs = GridFS(db, self.file_table)
# gf = fs.list()
# def findFile(self,db,file_table): #列出所有文件二進制數(shù)據(jù)
# fs = GridFS(db, table)
# for file in fs.find():
# bdata=file.read()
def write_2_disk(self,bdata, attri): #將二進制數(shù)據(jù)存入磁盤
name = "get_"+attri['filename']
if name:
output = open(name, 'wb')
output.write(bdata)
output.close()
print("fetch image ok!")
def remove(self,db,id): #文件數(shù)據(jù)庫中數(shù)據(jù)的刪除
fs = GridFS(db, self.file_table)
fs.delete(id) #只能是id
if __name__=='__main__':
gfs=GFS('fileDB','fileTable')
(file_db,fileTable) = gfs.createDB() #創(chuàng)建數(shù)據(jù)庫與數(shù)據(jù)表
filePath = 'C:/Users/Administrator/Desktop/02655.jpeg' #插入的文件
query = {'filename': '02655.jpeg'}
id=gfs.insertFile(file_db,filePath,query) #插入文件
id=gfs.getID(file_db,query)
(bdata,attri)=gfs.getFile(file_db,id) #查詢并獲取文件信息至內(nèi)存
gfs.write_2_disk(bdata,attri) #寫入磁盤
# gfs.remove(file_db,id) #刪除數(shù)據(jù)庫中文件
總結(jié)
以上是生活随笔為你收集整理的Python 操作GridFS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 普通类创建获取session 方式_猿蜕
- 下一篇: Linux加密框架 crypto 算法模