成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

django中FastDFS客戶端與自定義文件存儲系統(tǒng)

李增田 / 2611人閱讀

摘要:客戶端請求進行文件上傳下載,通過調(diào)度最終由完成文件上傳和下載。作用是文件存儲,客戶端上傳的文件最終存儲在服務(wù)器上,沒有實現(xiàn)自己的文件系統(tǒng)而是利用操作系統(tǒng)的文件系統(tǒng)來管理文件。如果名為的文件在文件系統(tǒng)中存在,則返回,否則返回。

什么是FastDFS

FastDFS 是用 c 語言編寫的一款開源的分布式文件系統(tǒng)。FastDFS 為互聯(lián)網(wǎng)量身定制, 充分考慮了冗余備份、負載均衡、線性擴容等機制,并注重高可用、高性能等指標,使用 FastDFS 很容易搭建一套高性能的文件服務(wù)器集群提供文件上傳、下載等服務(wù)。

FastDFS 架構(gòu)包括 Tracker server 和 Storage server。客戶端請求 Tracker server 進行文 件上傳、下載,通過 Tracker server 調(diào)度最終由 Storage server 完成文件上傳和下載。

Tracker server 作用是負載均衡和調(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ù)的機器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),但是默認文件存儲在本地,我們需要將文件保存到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_URL
    self.base_url = base_url
    if client_conf is None:
        client_conf = settings.FDFS_CLIENT_CONF
    self.client_conf = client_conf

3)存儲類中必須實現(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):

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è)置自定義文件存儲類

在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")

添加image域名

在/etc/hosts中添加訪問FastDFS storage服務(wù)器的域名

127.0.0.1 xxx

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42767.html

相關(guān)文章

  • FastDFS

    摘要:可以將稱為追蹤服務(wù)器或調(diào)度服務(wù)器。實際保存文件分為多個組,每個組之間保存的文件是不同的。文件索引信息包括組名,虛擬磁盤路徑,數(shù)據(jù)兩級目錄,文件名。虛擬磁盤路徑配置的虛擬路徑,與磁盤選項對應(yīng)。 分布式圖片服務(wù)器FastDFS 1 什么是FastDFS FastDFS 是用 c 語言編寫的一款開源的分布式文件系統(tǒng)。FastDFS 為互聯(lián)網(wǎng)量身定制, 充分考慮了冗余備份、負載均衡、線性擴容等...

    raoyi 評論0 收藏0
  • JPower 2.0.4 發(fā)布,新增FASTDFS文件存儲

    摘要:的存儲策略為了支持大容量,存儲節(jié)點服務(wù)器采用了分卷或分組的組織方式。的文件下載客戶端成功后,會拿到一個生成的文件名,接下來客戶端根據(jù)這個文件名即可訪問到該文件。一、FastDFS介紹FastDFS開源地址:https://github.com/happyfish100參考:分布式文件系統(tǒng)FastDFS設(shè)計原理參考:FastDFS分布式文件系統(tǒng)個人封裝的FastDFS Java API:htt...

    princekin 評論0 收藏0
  • java 文件存儲

    摘要:優(yōu)點開發(fā)成本低,可以配置加速網(wǎng)絡(luò)三分布式文件系統(tǒng)方案常見的分布式文件系統(tǒng)有,等。它們都不是系統(tǒng)級的分布式文件系統(tǒng),而是應(yīng)用級的分布式文件存儲服務(wù)。 一、小應(yīng)用存儲方案 在開發(fā)中上傳文件存儲是個問題,而一般小應(yīng)用開發(fā)會選擇服務(wù)器本地目錄做為存儲地址,通過保存文件的相對路徑來獲取文件,在應(yīng)用不要求高可用的情況下這是一種普遍的方案。 問題: 在每次更新Java版本時,都需要將文件目錄做一次備...

    Alfred 評論0 收藏0
  • java 文件存儲

    摘要:優(yōu)點開發(fā)成本低,可以配置加速網(wǎng)絡(luò)三分布式文件系統(tǒng)方案常見的分布式文件系統(tǒng)有,等。它們都不是系統(tǒng)級的分布式文件系統(tǒng),而是應(yīng)用級的分布式文件存儲服務(wù)。 一、小應(yīng)用存儲方案 在開發(fā)中上傳文件存儲是個問題,而一般小應(yīng)用開發(fā)會選擇服務(wù)器本地目錄做為存儲地址,通過保存文件的相對路徑來獲取文件,在應(yīng)用不要求高可用的情況下這是一種普遍的方案。 問題: 在每次更新Java版本時,都需要將文件目錄做一次備...

    shery 評論0 收藏0
  • FastDFS+Nginx搭建分布式圖片存儲

    摘要:可以將稱為追蹤服務(wù)器或調(diào)度服務(wù)器。實際保存文件分為多個組,每個組之間保存的文件是不同的。虛擬磁盤路徑配置的虛擬路徑,與磁盤選項對應(yīng)。數(shù)據(jù)兩級目錄服務(wù)器在每個虛擬磁盤路徑下創(chuàng)建的兩級目錄,用于存儲數(shù)據(jù)文件。1.什么是FastDFS FastDFS是用 c 語言編寫的一款開源的分布式文件系統(tǒng)。FastDFS 為互聯(lián)網(wǎng)量身定制, 充分考慮了冗余備份、負載均衡、線性擴容等機制,并注重高可用、高性能等...

    CoderDock 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<