Django使用fastDFS搭建的文件服务

基础环境

centos7

使用docker安装FastDFS

搜索docker 下的FastDFS镜像

docker search fastdfs

在这里插入图片描述
拉取fastdfs镜像

docker pull delron/fastdfs

使用docker镜像构建tracker容器(跟踪服务器,起到调度的作用)

 docker run -d --network=host --name tracker -v /home/hs/docker/fastdfs/tracker:/var/fdfs delron/fastdfs tracker

使用docker镜像构建storage容器(存储服务器,提供容量和备份服务)

docker run -d --network=host --name storage -e TRACKER_SERVER=101.132.167.60:22122 -v /home/hs/docker/fastdfs/storage:/var/fdfs -e GROUP_NAME=group1 delron/fastdfs storage

进入storage容器,到storage的配置文件中配置http访问的端口,配置文件在/etc/fdfs目录下的storage.conf。
在这里插入图片描述

注意:此处端口默认为8888 ,使用默认端口就可以了

docker操作fastDFS的相关命令

# 查看已经启动的容器
docker container ls
# 启动或者停止tracker
docker container start/stop tracker
# 启动或者停止storage
docker container start/stop storage

基于fastDFS自定义文件存储系统

安装fastDFS客户端依赖环境

pip install py3Fdfs
pip install mutagen
pip isntall requests

在项目的triton-website/CMS/utils/路径下新建文件夹fastDFS,切换到fastDFS目录下

  1. 新建fastDFS的客户端配置文件triton-website/CMS/utils/fastDFS/client.conf
base_path=/root/Workspace/Projects/Work/triton-website/CMS/logs/fastDFS
tracker_server=101.132.167.60:22122
connect_timeout=30
network_timeout=60
  1. 自定义文件存储类:triton-website/CMS/utils/fastDFS/fastDFS_storage.py
from django.conf import settings
from django.core.files.storage import Storage
from fdfs_client.client import Fdfs_client, get_tracker_conf
from django.utils.deconstruct import deconstructible


@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 = get_tracker_conf(settings.FDFS_CLIENT_CONF)
            client_conf = get_tracker_conf('utils/fastDFS/client.conf')
        self.client_conf = client_conf

    def _open(self, name, mode='rb'):
        """
        用不到打开文件,此处省略
        被Storage.open()调用,在打开文件时被使用。
        """
        pass

    def _save(self, name, content):
        """
        在fastDFS中保存文件
        被Storage.save()调用
        name是传入的文件名
        content是Django接收到的文件内容,该方法需要将content文件内容保存
        :return: 返回保存到fastDFS中的文件名,会被保存到数据库对应的字段
        """
        client = Fdfs_client(self.client_conf)  # 创建客户端对象
        # 上传文件的方法client.upload_by_filename(文件名)或client.upload_by_buffer(文件bytes数据)
        ret = client.upload_by_buffer(content.read())
        """
           {
               'Group name': 'group1',
               'Local file name': '02.png',
               'Remote file_id': 'group1/M00/00/00/wKgNgF9uzVuAd7JlAAS-_JN9ZAI299.png',
               'Status': 'Upload successed.',
               'Storage IP': '192.168.13.128',
               'Uploaded size': '303.00KB'
           }
        """
        if ret.get("Status") != "Upload successed.":
            raise Exception("上传文件到fastDFS失败")
        file_name = ret.get("Remote file_id")
        return file_name.decode()

    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

修改项目的配置文件:triton-website/CMS/CMS/settings/base.py

# 添加一下内容

# 配置django使用自定义的文件存储类
DEFAULT_FILE_STORAGE = 'utils.fastDFS.fastDFS_storage.FastDFSStorage'
# FastDFS
FDFS_URL = 'http://101.132.167.60:8888/'
# FDFS_CLIENT_CONF = os.path.join(BASE_DIR, 'utils/fastDFS/client.conf')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值