Django框架文件保存的流程

Django框架文件保存的流程(以及自定义FDFS)

Django框架文件保存的流程(以及自定义FDFS)
Django框架文件保存的流程(以及自定义FDFS)

自定义文件存储类过程说明

Django框架文件保存的流程(以及自定义FDFS)

Django框架文件保存的流程(以及自定义FDFS)

Django框架文件保存的流程(以及自定义FDFS)

from django.core.files.storage import Storage
from django.conf import settings

from fdfs_client.client import Fdfs_client
from rest_framework.exceptions import APIException


class FDFSStorage(Storage):
    """FDFS自定义文件存储类"""
    def __init__(self, client_conf=None, base_url=None):
        if client_conf is None:
            client_conf = settings.FDFS_CLIENT_CONF

        # 保存fdfs客户端配置文件路径
        self.client_conf = client_conf

        if base_url is None:
            base_url = settings.FDFS_URL

        # 保存storage中nginx的地址
        self.base_url = base_url

    def _save(self, name, content):
        """
        name: 上传文件的名称
        content: 包含上传文件内容的File对象,content.read()获取上传文件内容
        """
        # 将文件上传FDFS文件系统
        client = Fdfs_client(self.client_conf)

        # 上传文件
        res = client.upload_by_buffer(content.read())

        # 判断上传是否成功
        if res.get('Status') != 'Upload successed.':
            raise APIException('上传文件到FDFS失败')

        # 获取file_id
        file_id = res.get('Remote file_id')
        return file_id

    def exists(self, name):
        """
        判断上传文件的名称和文件系统中原有的文件名是否冲突
        name: 上传文件的名称
        """
        return False

    def url(self, name):
        """
        返回可访问到文件系统文件的完整url地址:
        name:表中文件字段存储内容
        """
        return self.base_url + name
  • 修改Django框架的默认文件存储类
DEFAULT_FILE_STORAGE='meiduo_mall.utils.fdfs.storage.FDFSStorage'
  • def url()作用
    Django框架文件保存的流程(以及自定义FDFS)

Django框架文件保存的流程(以及自定义FDFS)


Django框架文件保存的流程(以及自定义FDFS)