Python Django,FastDFS存储图片、文件

FastDFS学习笔记:https://pan.baidu.com/s/190W1aOwx2kEkUciyKvmXiA  密码:d84o

 

安装fdfs_client:cd 进入fdfs_client-py-master.zip所在目录, pip3 install fdfs_client-py-master.zip  

Python Django,FastDFS存储图片、文件_第1张图片

utils/fdfs/storage.py(自定义Storage存储类):

from django.core.files.storage import Storage
from django.conf import settings
from fdfs_client.client import Fdfs_client

# 自定义的文件存储类 (继承Storage)
# 后台Admin管理站点中,就是通过Storage类来实现文件的上传/下载。
class FDFSStorage(Storage):
    '''fast dfs文件存储类'''
    def __init__(self, client_conf=None, base_url=None):
        '''初始化'''
        if client_conf is None:
            client_conf = settings.FDFS_CLIENT_CONF
        self.client_conf = client_conf

        if base_url is None:
            base_url = settings.FDFS_URL
        self.base_url = base_url

    # 必须重写_open()和_save()方法
    def _open(self, name, mode='rb'):
        '''打开文件时使用'''
        pass

    def _save(self, name, content):
        '''保存文件时使用'''
        # name:上传文件的源名字
        # content:包含上传文件内容的File对象

        # 创建一个Fdfs_client对象
        client = Fdfs_client(self.client_conf)

        # 上传文件到fast dfs系统中
        res = client.upload_by_buffer(content.read())

        # res就是一个字典,格式如下:
        # dict
        # {
        #     'Group name': group_name,
        #     'Remote file_id': remote_file_id,
        #     'Status': 'Upload successed.',
        #     'Local file name': '',
        #     'Uploaded size': upload_size,
        #     'Storage IP': storage_ip
        # }
        if res.get('Status') != 'Upload successed.':
            # 上传失败
            raise Exception('上传文件到fast dfs失败')

        # 获取返回的文件ID
        filename = res.get('Remote file_id')

        return filename  # 返回的内容,就会保存到Django的数据库中(后台Admin管理站点)。

    def exists(self, name):
        '''Django判断文件名是否可用'''
        return False

    # 前端模板页中,img标签的src会用到该方法返回值
    def url(self, name):
        '''返回访问文件的url路径'''
        return self.base_url+name

utils/fdfs/client.conf(Fdfs_client上传文件使用到的配置文件):


connect_timeout=30

network_timeout=60

# the base path to store log files
base_path=/Users/用户名/Desktop

# FastDfs的追踪服务器的ip和端口号
tracker_server=127.0.0.1:22122

log_level=info

use_connection_pool = false

connection_pool_max_idle_time = 3600

load_fdfs_parameters_from_tracker=false

use_storage_id = false

storage_ids_filename = storage_ids.conf

http.tracker_server_port=80

项目名/settings.py(项目配置,配置Django上传、下载文件时使用的默认存储类):

# 设置Django的默认文件存储类 (后台Admin管理站点就是通过该类上传/下载文件)
DEFAULT_FILE_STORAGE='utils.fdfs.storage.FDFSStorage'   # 设置成自定义的文件存储类

# 设置fdfs使用的client.conf文件路径
FDFS_CLIENT_CONF='./utils/fdfs/client.conf'

# 设置fdfs存储服务器上nginx的IP和端口号
FDFS_URL='http://127.0.0.1:8888/'

templates/demo.html(模板,src使用.url获取请求地址):

   {# image是goods模型类ImageField类型的字段,.url会自动获取http开头的请求地址 #}

 

你可能感兴趣的:(Python+)