Python 操作GridFS

2022-06-23 22:33:18 字數 2788 閱讀 1750

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): #

連線資料庫,並建立檔案資料庫與資料表

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): #

將檔案存入資料表

fs =gridfs(db,self.file_table)

iffs.exists(query):

print('

已經存在該檔案')

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): #

獲取檔案屬性,並讀出二進位制資料至記憶體

fs =gridfs(db, self.file_table)

gf=fs.get(id)

bdata=gf.read() #

二進位制資料

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): #列出所有檔案二進位制資料

#fs = gridfs(db, table)

#for file in fs.find():

#bdata=file.read()

def write_2_disk(self,bdata, attri): #

將二進位制資料存入磁碟

name = "

get_

"+attri['

filename']

ifname:

output = open(name, 'wb'

) output.write(bdata)

output.close()

print("

fetch image ok!")

def remove(self,db,id): #

檔案資料庫中資料的刪除

fs =gridfs(db, self.file_table)

fs.delete(id)

#只能是id

if__name__=='

__main__':

gfs=gfs('

filedb

','filetable')

(file_db,filetable) = gfs.createdb() #

建立資料庫與資料表

filepath = '

c:/users/administrator/desktop/02655.jpeg'#

插入的檔案

query =

id=gfs.insertfile(file_db,filepath,query) #

插入檔案

id=gfs.getid(file_db,query)

(bdata,attri)=gfs.getfile(file_db,id) #

查詢並獲取檔案資訊至記憶體

gfs.write_2_disk(bdata,attri) #

寫入磁碟

#gfs.remove(file_db,id) #刪除資料庫中檔案

分散式檔案系統 GridFS

gridfs是mongodb提供的用於持久化儲存檔案的模組,cms使用mongodb儲存資料,使用gridfs可以快速整合開發。 它的工作原理是 在gridfs儲存檔案是將檔案分塊儲存,檔案會按照256kb的大小分割成多個塊進行儲存,gridfs使用兩個集合 collection 儲存檔案,一個集合...

Python Mongo操作

coding utf 8 python mongo操作demo done from pymongo import mongoclient c...

python 字典操作

字典的常用操作 clear 功能 清空字典 dict li dict li clear 返回結果 dict li copy 功能 淺拷貝 d...