摘要:客戶端請求進行文件上傳下載,通過調度最終由完成文件上傳和下載。作用是文件存儲,客戶端上傳的文件最終存儲在服務器上,沒有實現自己的文件系統而是利用操作系統的文件系統來管理文件。如果名為的文件在文件系統中存在,則返回,否則返回。
什么是FastDFS
FastDFS 是用 c 語言編寫的一款開源的分布式文件系統。FastDFS 為互聯網量身定制, 充分考慮了冗余備份、負載均衡、線性擴容等機制,并注重高可用、高性能等指標,使用 FastDFS 很容易搭建一套高性能的文件服務器集群提供文件上傳、下載等服務。
FastDFS 架構包括 Tracker server 和 Storage server。客戶端請求 Tracker server 進行文 件上傳、下載,通過 Tracker server 調度最終由 Storage server 完成文件上傳和下載。
Tracker server 作用是負載均衡和調度,通過 Tracker server 在文件上傳時可以根據一些 策略找到 Storage server 提供文件上傳服務。可以將 tracker 稱為追蹤服務器或調度服務器。
Storage server 作用是文件存儲,客戶端上傳的文件最終存儲在 Storage 服務器上, Storageserver 沒有實現自己的文件系統而是利用操作系統 的文件系統來管理文件。可以將 storage 稱為存儲服務器。
利用docker安裝fastDFS
docker image pull delron/fastdfs
執行如下命令開啟tracker 服務
ocker run -dti --network=host --name tracker -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker
執行如下命令查看tracker是否運行起來
docker container ls
如果想停止tracker服務,可以執行如下命令
docker container stop tracker
停止后,重新運行tracker,可以執行如下命令
docker container start tracker
執行如下命令開啟storage服務
docker run -dti --network=host --name storage -e TRACKER_SERVER=10.211.55.5:22122 -v /var/fdfs/storage:/var/fdfs delron/fastdfs storage
執行如下命令查看storage是否運行起來
docker container ls
如果想停止storage服務,可以執行如下命令
docker container stop storage
停止后,重新運行storage,可以執行如下命令
docker container start storage、
python版本的FastDFS客戶端使用說明參考https://github.com/jefforeill...
使用FastDFS客戶端,需要有配置文件。
base_path=FastDFS客戶端存放日志文件的目錄
tracker_server=運行tracker服務的機器ip:22122
上傳文件需要先創建fdfs_client.client.Fdfs_client的對象,并指明配置文件,如
from fdfs_client.client import Fdfs_client
client = Fdfs_client("fastdfs/client.conf")
通過創建的客戶端對象執行上傳文件的方法
client.upload_by_filename(文件名)
或
client.upload_by_buffer(文件bytes數據)
自定義Django文件存儲系統
Django自帶文件存儲系統,但是默認文件存儲在本地,我們需要將文件保存到FastDFS服務器上。
自定義文件存儲系統的方法如下:
1)需要繼承自django.core.files.storage.Storage,如
from django.core.files.storage import Storage
class FastDFSStorage(Storage):
...
2)支持Django不帶任何參數來實例化存儲類,也就是說任何設置都應該從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)存儲類中必須實現_open()和_save()方法,以及任何后續使用中可能用到的其他方法。
_open(name, mode="rb")
被Storage.open()調用,在打開文件時被使用。
_save(name, content)
被Storage.save()調用,name是傳入的文件名,content是Django接收到的文件內容,該方法需要將content文件內容保存。
Django會將該方法的返回值保存到數據庫中對應的文件字段,也就是說該方法應該返回要保存在數據庫中的文件名稱信息。
exists(name)
如果名為name的文件在文件系統中存在,則返回True,否則返回False。
url(name)
返回文件的完整訪問URL
delete(name)
刪除name的文件
listdir(path)
列出指定路徑的內容
size(name)
返回name文件的總大小
注意,并不是這些方法全部都要實現,可以省略用不到的方法。
4)需要為存儲類添加django.utils.deconstruct.deconstructible裝飾器
我們在fastdfs目錄中創建fdfs_storage.py文件,實現可以使用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):
def __init__(self, base_url=None, client_conf=None): """ 初始化 :param base_url: 用于構造圖片完整路徑使用,圖片服務器的域名 :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: 文件內容 :return: 保存到數據庫中的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: 數據庫中保存的文件名 :return: 完整的URL """ return self.base_url + name def exists(self, name): """ 判斷文件是否存在,FastDFS可以自行解決文件的重名問題 所以此處返回False,告訴Django上傳的都是新文件 :param name: 文件名 :return: False """ return False
在Django配置中設置自定義文件存儲類
在settings/dev.py文件中添加設置
django文件存儲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服務器的域名
127.0.0.1 xxx
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42767.html
摘要:的存儲策略為了支持大容量,存儲節點服務器采用了分卷或分組的組織方式。的文件下載客戶端成功后,會拿到一個生成的文件名,接下來客戶端根據這個文件名即可訪問到該文件。一、FastDFS介紹FastDFS開源地址:https://github.com/happyfish100參考:分布式文件系統FastDFS設計原理參考:FastDFS分布式文件系統個人封裝的FastDFS Java API:htt...
摘要:可以將稱為追蹤服務器或調度服務器。實際保存文件分為多個組,每個組之間保存的文件是不同的。虛擬磁盤路徑配置的虛擬路徑,與磁盤選項對應。數據兩級目錄服務器在每個虛擬磁盤路徑下創建的兩級目錄,用于存儲數據文件。1.什么是FastDFS FastDFS是用 c 語言編寫的一款開源的分布式文件系統。FastDFS 為互聯網量身定制, 充分考慮了冗余備份、負載均衡、線性擴容等機制,并注重高可用、高性能等...
閱讀 2964·2021-10-15 09:41
閱讀 1620·2021-09-22 15:56
閱讀 2104·2021-08-10 09:43
閱讀 3273·2019-08-30 13:56
閱讀 1778·2019-08-30 12:47
閱讀 648·2019-08-30 11:17
閱讀 2770·2019-08-30 11:09
閱讀 2193·2019-08-29 16:19