django中FastDFS客户端与自定义文件存储系统
FastDFS 是用 c 語言編寫的一款開源的分布式文件系統(tǒng)。FastDFS 為互聯(lián)網(wǎng)量身定制, 充分考慮了冗余備份、負(fù)載均衡、線性擴(kuò)容等機(jī)制,并注重高可用、高性能等指標(biāo),使用 FastDFS 很容易搭建一套高性能的文件服務(wù)器集群提供文件上傳、下載等服務(wù)。
FastDFS 架構(gòu)包括 Tracker server 和 Storage server。客戶端請求 Tracker server 進(jìn)行文 件上傳、下載,通過 Tracker server 調(diào)度最終由 Storage server 完成文件上傳和下載。
Tracker server 作用是負(fù)載均衡和調(diào)度,通過 Tracker server 在文件上傳時可以根據(jù)一些 策略找到 Storage server 提供文件上傳服務(wù)。可以將 tracker 稱為追蹤服務(wù)器或調(diào)度服務(wù)器。
Storage server 作用是文件存儲,客戶端上傳的文件最終存儲在 Storage 服務(wù)器上, Storageserver 沒有實現(xiàn)自己的文件系統(tǒng)而是利用操作系統(tǒng) 的文件系統(tǒng)來管理文件。可以將 storage 稱為存儲服務(wù)器。
利用docker安裝fastDFS
docker image pull delron/fastdfs
執(zhí)行如下命令開啟tracker 服務(wù)
ocker run -dti --network=host --name tracker -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker
執(zhí)行如下命令查看tracker是否運行起來
docker container ls
如果想停止tracker服務(wù),可以執(zhí)行如下命令
docker container stop tracker
停止后,重新運行tracker,可以執(zhí)行如下命令
docker container start tracker
執(zhí)行如下命令開啟storage服務(wù)
docker run -dti --network=host --name storage -e TRACKER_SERVER=10.211.55.5:22122 -v /var/fdfs/storage:/var/fdfs delron/fastdfs storage
執(zhí)行如下命令查看storage是否運行起來
docker container ls
如果想停止storage服務(wù),可以執(zhí)行如下命令
docker container stop storage
停止后,重新運行storage,可以執(zhí)行如下命令
docker container start storage、
python版本的FastDFS客戶端使用說明參考https://github.com/jefforeill...
使用FastDFS客戶端,需要有配置文件。
base_path=FastDFS客戶端存放日志文件的目錄
tracker_server=運行tracker服務(wù)的機(jī)器ip:22122
上傳文件需要先創(chuàng)建fdfs_client.client.Fdfs_client的對象,并指明配置文件,如
from fdfs_client.client import Fdfs_client
client = Fdfs_client('fastdfs/client.conf')
通過創(chuàng)建的客戶端對象執(zhí)行上傳文件的方法
client.upload_by_filename(文件名)
或
client.upload_by_buffer(文件bytes數(shù)據(jù))
自定義Django文件存儲系統(tǒng)
Django自帶文件存儲系統(tǒng),但是默認(rèn)文件存儲在本地,我們需要將文件保存到FastDFS服務(wù)器上。
自定義文件存儲系統(tǒng)的方法如下:
1)需要繼承自django.core.files.storage.Storage,如
from django.core.files.storage import Storage
class FastDFSStorage(Storage):
...2)支持Django不帶任何參數(shù)來實例化存儲類,也就是說任何設(shè)置都應(yīng)該從django.conf.settings中獲取
from django.conf import settings
from django.core.files.storage import Storage
class FastDFSStorage(Storage):
def __init__(self, base_url=None, client_conf=None):if base_url is None:base_url = settings.FDFS_URLself.base_url = base_urlif client_conf is None:client_conf = settings.FDFS_CLIENT_CONFself.client_conf = client_conf3)存儲類中必須實現(xiàn)_open()和_save()方法,以及任何后續(xù)使用中可能用到的其他方法。
_open(name, mode='rb')
被Storage.open()調(diào)用,在打開文件時被使用。
_save(name, content)
被Storage.save()調(diào)用,name是傳入的文件名,content是Django接收到的文件內(nèi)容,該方法需要將content文件內(nèi)容保存。
Django會將該方法的返回值保存到數(shù)據(jù)庫中對應(yīng)的文件字段,也就是說該方法應(yīng)該返回要保存在數(shù)據(jù)庫中的文件名稱信息。
exists(name)
如果名為name的文件在文件系統(tǒng)中存在,則返回True,否則返回False。
url(name)
返回文件的完整訪問URL
delete(name)
刪除name的文件
listdir(path)
列出指定路徑的內(nèi)容
size(name)
返回name文件的總大小
注意,并不是這些方法全部都要實現(xiàn),可以省略用不到的方法。
4)需要為存儲類添加django.utils.deconstruct.deconstructible裝飾器
我們在fastdfs目錄中創(chuàng)建fdfs_storage.py文件,實現(xiàn)可以使用FastDFS存儲文件的存儲類如下
from django.conf import settings
from django.core.files.storage import Storage
from django.utils.deconstruct import deconstructible
from fdfs_client.client import Fdfs_client
@deconstructible
class FastDFSStorage(Storage):
在settings/dev.py文件中添加設(shè)置
django文件存儲
DEFAULT_FILE_STORAGE = 'fastdfs.fdfs_storage.FastDFSStorage'
FastDFS
FDFS_URL = 'http://xxx:8888/'
FDFS_CLIENT_CONF = os.path.join(BASE_DIR, 'fastdfs/client.conf')
在/etc/hosts中添加訪問FastDFS storage服務(wù)器的域名
127.0.0.1 xxx
總結(jié)
以上是生活随笔為你收集整理的django中FastDFS客户端与自定义文件存储系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: testlink自带java api_j
- 下一篇: 政务中心综合信息系统建设方案