摘要:客戶端請(qǐng)求進(jìn)行文件上傳下載,通過調(diào)度最終由完成文件上傳和下載。作用是文件存儲(chǔ),客戶端上傳的文件最終存儲(chǔ)在服務(wù)器上,沒有實(shí)現(xiàn)自己的文件系統(tǒng)而是利用操作系統(tǒng)的文件系統(tǒng)來管理文件。如果名為的文件在文件系統(tǒng)中存在,則返回,否則返回。
什么是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??蛻舳苏?qǐng)求 Tracker server 進(jìn)行文 件上傳、下載,通過 Tracker server 調(diào)度最終由 Storage server 完成文件上傳和下載。
Tracker server 作用是負(fù)載均衡和調(diào)度,通過 Tracker server 在文件上傳時(shí)可以根據(jù)一些 策略找到 Storage server 提供文件上傳服務(wù)??梢詫?tracker 稱為追蹤服務(wù)器或調(diào)度服務(wù)器。
Storage server 作用是文件存儲(chǔ),客戶端上傳的文件最終存儲(chǔ)在 Storage 服務(wù)器上, Storageserver 沒有實(shí)現(xiàn)自己的文件系統(tǒng)而是利用操作系統(tǒng) 的文件系統(tǒng)來管理文件??梢詫?storage 稱為存儲(chǔ)服務(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是否運(yùn)行起來
docker container ls
如果想停止tracker服務(wù),可以執(zhí)行如下命令
docker container stop tracker
停止后,重新運(yùn)行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是否運(yùn)行起來
docker container ls
如果想停止storage服務(wù),可以執(zhí)行如下命令
docker container stop storage
停止后,重新運(yùn)行storage,可以執(zhí)行如下命令
docker container start storage、
python版本的FastDFS客戶端使用說明參考https://github.com/jefforeill...
使用FastDFS客戶端,需要有配置文件。
base_path=FastDFS客戶端存放日志文件的目錄
tracker_server=運(yùn)行tracker服務(wù)的機(jī)器ip:22122
上傳文件需要先創(chuàng)建fdfs_client.client.Fdfs_client的對(duì)象,并指明配置文件,如
from fdfs_client.client import Fdfs_client
client = Fdfs_client("fastdfs/client.conf")
通過創(chuàng)建的客戶端對(duì)象執(zhí)行上傳文件的方法
client.upload_by_filename(文件名)
或
client.upload_by_buffer(文件bytes數(shù)據(jù))
自定義Django文件存儲(chǔ)系統(tǒng)
Django自帶文件存儲(chǔ)系統(tǒng),但是默認(rèn)文件存儲(chǔ)在本地,我們需要將文件保存到FastDFS服務(wù)器上。
自定義文件存儲(chǔ)系統(tǒng)的方法如下:
1)需要繼承自django.core.files.storage.Storage,如
from django.core.files.storage import Storage
class FastDFSStorage(Storage):
...
2)支持Django不帶任何參數(shù)來實(shí)例化存儲(chǔ)類,也就是說任何設(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_URL self.base_url = base_url if client_conf is None: client_conf = settings.FDFS_CLIENT_CONF self.client_conf = client_conf
3)存儲(chǔ)類中必須實(shí)現(xiàn)_open()和_save()方法,以及任何后續(xù)使用中可能用到的其他方法。
_open(name, mode="rb")
被Storage.open()調(diào)用,在打開文件時(shí)被使用。
_save(name, content)
被Storage.save()調(diào)用,name是傳入的文件名,content是Django接收到的文件內(nèi)容,該方法需要將content文件內(nèi)容保存。
Django會(huì)將該方法的返回值保存到數(shù)據(jù)庫中對(duì)應(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文件的總大小
注意,并不是這些方法全部都要實(shí)現(xiàn),可以省略用不到的方法。
4)需要為存儲(chǔ)類添加django.utils.deconstruct.deconstructible裝飾器
我們在fastdfs目錄中創(chuàng)建fdfs_storage.py文件,實(shí)現(xiàn)可以使用FastDFS存儲(chǔ)文件的存儲(chǔ)類如下
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):
def __init__(self, base_url=None, client_conf=None): """ 初始化 :param base_url: 用于構(gòu)造圖片完整路徑使用,圖片服務(wù)器的域名 :param client_conf: FastDFS客戶端配置文件的路徑 """ if base_url is None: base_url = settings.FDFS_URL self.base_url = base_url if client_conf is None: client_conf = settings.FDFS_CLIENT_CONF self.client_conf = client_conf def _save(self, name, content): """ 在FastDFS中保存文件 :param name: 傳入的文件名 :param content: 文件內(nèi)容 :return: 保存到數(shù)據(jù)庫中的FastDFS的文件名 """ client = Fdfs_client(self.client_conf) ret = client.upload_by_buffer(content.read()) if ret.get("Status") != "Upload successed.": raise Exception("upload file failed") file_name = ret.get("Remote file_id") return file_name def url(self, name): """ 返回文件的完整URL路徑 :param name: 數(shù)據(jù)庫中保存的文件名 :return: 完整的URL """ return self.base_url + name def exists(self, name): """ 判斷文件是否存在,F(xiàn)astDFS可以自行解決文件的重名問題 所以此處返回False,告訴Django上傳的都是新文件 :param name: 文件名 :return: False """ return False
在Django配置中設(shè)置自定義文件存儲(chǔ)類
在settings/dev.py文件中添加設(shè)置
django文件存儲(chǔ)DEFAULT_FILE_STORAGE = "fastdfs.fdfs_storage.FastDFSStorage"
FastDFSFDFS_URL = "http://xxx:8888/"
FDFS_CLIENT_CONF = os.path.join(BASE_DIR, "fastdfs/client.conf")
添加image域名
在/etc/hosts中添加訪問FastDFS storage服務(wù)器的域名
127.0.0.1 xxx
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/42767.html
摘要:可以將稱為追蹤服務(wù)器或調(diào)度服務(wù)器。實(shí)際保存文件分為多個(gè)組,每個(gè)組之間保存的文件是不同的。文件索引信息包括組名,虛擬磁盤路徑,數(shù)據(jù)兩級(jí)目錄,文件名。虛擬磁盤路徑配置的虛擬路徑,與磁盤選項(xiàng)對(duì)應(yīng)。 分布式圖片服務(wù)器FastDFS 1 什么是FastDFS FastDFS 是用 c 語言編寫的一款開源的分布式文件系統(tǒng)。FastDFS 為互聯(lián)網(wǎng)量身定制, 充分考慮了冗余備份、負(fù)載均衡、線性擴(kuò)容等...
摘要:的存儲(chǔ)策略為了支持大容量,存儲(chǔ)節(jié)點(diǎn)服務(wù)器采用了分卷或分組的組織方式。的文件下載客戶端成功后,會(huì)拿到一個(gè)生成的文件名,接下來客戶端根據(jù)這個(gè)文件名即可訪問到該文件。一、FastDFS介紹FastDFS開源地址:https://github.com/happyfish100參考:分布式文件系統(tǒng)FastDFS設(shè)計(jì)原理參考:FastDFS分布式文件系統(tǒng)個(gè)人封裝的FastDFS Java API:htt...
摘要:優(yōu)點(diǎn)開發(fā)成本低,可以配置加速網(wǎng)絡(luò)三分布式文件系統(tǒng)方案常見的分布式文件系統(tǒng)有,等。它們都不是系統(tǒng)級(jí)的分布式文件系統(tǒng),而是應(yīng)用級(jí)的分布式文件存儲(chǔ)服務(wù)。 一、小應(yīng)用存儲(chǔ)方案 在開發(fā)中上傳文件存儲(chǔ)是個(gè)問題,而一般小應(yīng)用開發(fā)會(huì)選擇服務(wù)器本地目錄做為存儲(chǔ)地址,通過保存文件的相對(duì)路徑來獲取文件,在應(yīng)用不要求高可用的情況下這是一種普遍的方案。 問題: 在每次更新Java版本時(shí),都需要將文件目錄做一次備...
摘要:優(yōu)點(diǎn)開發(fā)成本低,可以配置加速網(wǎng)絡(luò)三分布式文件系統(tǒng)方案常見的分布式文件系統(tǒng)有,等。它們都不是系統(tǒng)級(jí)的分布式文件系統(tǒng),而是應(yīng)用級(jí)的分布式文件存儲(chǔ)服務(wù)。 一、小應(yīng)用存儲(chǔ)方案 在開發(fā)中上傳文件存儲(chǔ)是個(gè)問題,而一般小應(yīng)用開發(fā)會(huì)選擇服務(wù)器本地目錄做為存儲(chǔ)地址,通過保存文件的相對(duì)路徑來獲取文件,在應(yīng)用不要求高可用的情況下這是一種普遍的方案。 問題: 在每次更新Java版本時(shí),都需要將文件目錄做一次備...
摘要:可以將稱為追蹤服務(wù)器或調(diào)度服務(wù)器。實(shí)際保存文件分為多個(gè)組,每個(gè)組之間保存的文件是不同的。虛擬磁盤路徑配置的虛擬路徑,與磁盤選項(xiàng)對(duì)應(yīng)。數(shù)據(jù)兩級(jí)目錄服務(wù)器在每個(gè)虛擬磁盤路徑下創(chuàng)建的兩級(jí)目錄,用于存儲(chǔ)數(shù)據(jù)文件。1.什么是FastDFS FastDFS是用 c 語言編寫的一款開源的分布式文件系統(tǒng)。FastDFS 為互聯(lián)網(wǎng)量身定制, 充分考慮了冗余備份、負(fù)載均衡、線性擴(kuò)容等機(jī)制,并注重高可用、高性能等...
閱讀 3037·2021-10-15 09:41
閱讀 1697·2021-09-22 15:56
閱讀 2174·2021-08-10 09:43
閱讀 3345·2019-08-30 13:56
閱讀 1849·2019-08-30 12:47
閱讀 716·2019-08-30 11:17
閱讀 2843·2019-08-30 11:09
閱讀 2239·2019-08-29 16:19