FastDFS自定义文件存储系统

  • Post author:
  • Post category:其他


自定义文件存储系统, 前提是使用Docker安装和运行FastDFS.

1.⾃自定义⽂文件存储系统的类

from django.core.files.storage import Storage
class FastDFSStorage(Storage):
...

2. 内部实现

class FastDFSStorage(Storage):
    """⾃自定义Django⽂文件存储系统"""
    def __init__(self, client_conf=None, base_url=None):
        self.client_conf = client_conf or settings.FDFS_CLIENT_CONF
        self.base_url = base_url or settings.FDFS_BASE_URL
    def _open(self, name, mode='rb'):
        """打开⽂文件时调⽤用的,⽬目前⽤用不不到,但是必须实现,所以pass"""
        pass
    def _save(self, name, content):
        """
        保存⽂文件时调⽤用的
        :param name: 要保存的⽂文件名字
        :param content: 要保存的⽂文件内容
        :return: ⽂文件在fdfs唯⼀一标识(file_id)
        """
        client = Fdfs_client(self.client_conf)
        ret = client.upload_by_buffer(content.read())
        # 判断上传是否成功
        if ret.get('Status') != 'Upload successed.':
            raise Exception('fastfds upload failed')
        # 返回结果
        file_id = ret.get('Remote file_id')
        return file_id
    def exists(self, name):
        """判断⽂文件是否存在时调⽤用的,返回Fasle告诉Django每次都是新的⽂文件"""
        return False
    def url(self, name):
        """返回⽂文件全路路径"""
        return self.base_url + name

3.修改默认的存储后端, 修改配置文件

# django⽂文件存储
DEFAULT_FILE_STORAGE = 'meiduo_mall.utils.fastdfs.fdfs_storage.FastDFSStorage'
# FastDFS
FDFS_BASE_URL = 'http://----ip地址----:8888/'
FDFS_CLIENT_CONF = os.path.join(BASE_DIR, 'utils/fastdfs/client.conf')



版权声明:本文为xiangwenv587原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。